gpt4 book ai didi

xcode - 'Class.Type' 没有名为 'variable' 的成员错误只是缺少类变量支持?

转载 作者:IT王子 更新时间:2023-10-29 05:23:26 25 4
gpt4 key购买 nike

我一直在尝试在类中使用常量和变量,这些常量和变量通过名称在类级别引用同一类中的其他常量和变量。 AFAIK,截至 Xcode 6 beta 4,Swift 仍然没有类变量支持。我想知道的是,我在尝试引用其他常量 (let) 或变量 (var) 时看到的错误是否仅仅是因为缺少类变量支持?

您可以在方法内或类外引用常量和变量,只是您似乎无法在类级别通过名称进行引用。下面的类显示了几个变体以及您将在 Xcode 6 beta 4 中看到的错误。

这可以在 playground 或常规 .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#define 用于常量,然后该常量用于设置变量。

@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 指的是一个类型的实例,在该类型被认为完全初始化之前不存在,因此不能用于默认属性值。

错误:“Simple.Type”没有名为“someConstant”的成员

类变量和静态变量分别被认为是类和结构的“类型变量”。这意味着它们被定义为类型本身 的变量,而不是该类型的实例。根据这个定义以及您不能将 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
}

引用:我对The Swift Programming Language的“Properties”和“Initializers”章节的记忆。

关于xcode - 'Class.Type' 没有名为 'variable' 的成员错误只是缺少类变量支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24876985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com