我一直在尝试在类中使用常量和变量,这些常量和变量在类级别上按名称引用同一类中的其他常量和变量。AFAIK,从Xcode 6 beta
4开始,Swift仍然没有类变量支持。我想知道的是,当我尝试引用其他常量(let)或变量(var)时看到的错误是否仅仅是由于缺少类变量支持?
您可以在方法内或类外部引用常量和变量,只是似乎无法在类级别按名称引用。下列类别显示了几种变体,以及将在Xcode 6 beta 4中显示的错误。
可以在游乐场或常规.swift文件中进行测试。
class Simple {
let someConstant = 0.50
var someVariable = 1
// uncomment let and var lines to see the errors
// error: 'Simple.Type' does not have a member named 'someConstant'
// let referringConstant = someConstant
// error: Use of unresolved identifier 'self'
// let referringConstant = self.someConstant
// error: 'Simple.Type' does not have a member named 'someVariable'
// var referringVar = someVariable
// error: Use of unresolved identifier 'self'
// var referringVar = self.someVariable
// can't do class constants or variables yet either
// let referringConstant = Simple.someConstant
// var referringVar = Simple.someVariable
func simpleMethod() {
// both of these forms are valid as long as it is unambiguous
let referToConstant = someConstant
let referToVariable = someVariable
var anotherConstant = self.someConstant
var anotherVariable = self.someVariable
}
}
作为参考,导致Swift中出现此问题的原始Objective-C代码来自CS193P SuperCard应用,其中C
@interface PlayingCardView()
@property (nonatomic) CGFloat faceCardScaleFactor;
@end
@implementation PlayingCardView
#pragma mark - Properties
@synthesize faceCardScaleFactor = _faceCardScaleFactor;
#define DEFAULT_FACE_CARD_SCALE_FACTOR 0.90
- (CGFloat)faceCardScaleFactor
{
if (!_faceCardScaleFactor) _faceCardScaleFactor = DEFAULT_FACE_CARD_SCALE_FACTOR;
return _faceCardScaleFactor;
}
- (void)setFaceCardScaleFactor:(CGFloat)faceCardScaleFactor
{
_faceCardScaleFactor = faceCardScaleFactor;
[self setNeedsDisplay];
}
您收到的两个错误消息实际上是两个不同但相关的原因的结果。
self
引用类型的实例,并且在该类型被认为已完全初始化之前不存在,因此不能用于默认属性值。
类变量和静态变量分别被视为类和结构的“类型变量”。这意味着将它们定义为 类型本身
上的变量,而不是该类型的实例。根据这个定义以及您不能使用self
默认属性值的事实,很明显,此错误消息是Swift寻找名为的类变量的结果someConstant
。自Beta
4起,仍不支持类变量。
考虑到类型变量的类似结构的代码可以很好地编译:
struct Simple {
static let someConstant = 0.50
static var someVariable = 1
let referringConstant = someConstant
var referringVar = someVariable
let explicitTypeProperty = Simple.someConstant
}
参考:我对 Swift编程语言 的“属性”和“初始化程序”章节的回忆。
问题内容: 我知道,这个特定的错误已经在各处发布,并且代码有些基本,但是我自己仍然无法弄清楚这个错误,我需要建议。 问题是当我添加parse.com上提供的前两行代码以保存对象时 第二行出现以下错误: “ PFObject”没有名为“下标”的成员 我正在使用Xcode 6.3 beta2。所有必需的库都与通过BridgeHeader导入的二进制文件链接。 我应该使用什么语法? 问题答案: 发生这种
问题内容: 我想填充用的与经典ASP / VBScript中的站点。这些值是从SQL Server数据库读取和获取的,其代码类似于: 我的问题是似乎只有一侧可以评估。 随着我得到: 随着我得到: 应该采取什么措施缓解这一问题? 问题答案: 试试这个:
问题内容: 我正在获取图像,并使用了以下代码。与配合使用时效果很好。更新到之后,我得到如下错误: 是我的代码还是Apple的bug?请在这里帮助我。TIA。 问题答案: 该初始值设定项现在是可失败的初始值设定项,因此它返回了optional 。 要快速修复您的错误,只需解开图像即可: 但我想您会在代码中多次引用该变量,在这种情况下,我建议使用可选绑定:
主要内容:在类体中和类体外定义成员函数的区别类可以看做是一种数据类型,它类似于普通的数据类型,但是又有别于普通的数据类型。类这种数据类型是一个包含成员变量和成员函数的集合。 类的成员变量和普通变量一样,也有数据类型和名称,占用固定长度的内存。但是,在定义类的时候不能对成员变量赋值,因为类只是一种数据类型或者说是一种模板,本身不占用内存空间,而变量的值则需要内存来存储。 类的成员函数也和普通函数一样,都有返回值和参数列表,它与一般函数的区别是
我很难弄清楚如何使用适当的模板化参数调用setValue函数。在ParameterBase抽象基类中不可能有模板化的参数。非常感谢任何帮助。 附注。我没有使用boost::any的灵活性。
- a - addr : rt_i2c_bus_device , rt_i2c_msg ai_addr : addrinfo ai_addrlen : addrinfo ai_canonname : addrinfo ai_family : addrinfo ai_flags : addrinfo ai_next : addrinfo ai_protocol : addrinfo ai_soc