Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode ';Class.Type';没有名为'的成员;变量';错误只是缺少类变量支持?_Xcode_Swift - Fatal编程技术网

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

Xcode ';Class.Type';没有名为'的成员;变量';错误只是缺少类变量支持?,xcode,swift,Xcode,Swift,我一直在尝试在一个类中使用常量和变量,该类在类级别通过名称引用同一个类中的其他常量和变量。另外,从Xcode 6 beta 4开始,Swift仍然没有类变量支持。我想知道的是,我在尝试引用其他常量(let)或变量(var)时看到的错误是否仅仅是因为缺少类变量支持 您可以在方法内部或类外部引用常量和变量,但似乎无法在类级别按名称引用。下面的类显示了几个变体以及您将在Xcode 6 beta 4中看到的错误 这可以在操场或常规的.swift文件中进行测试 class Simple { le

我一直在尝试在一个类中使用常量和变量,该类在类级别通过名称引用同一个类中的其他常量和变量。另外,从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#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
}

参考资料:我对Swift编程语言的“属性”和“初始值设定项”章节的记忆。

我认为这更多地与在类或结构级别无法使用self有关。无法保证您没有将垃圾分配给某个值(尽管有let),您要声明的成员中没有一个是类成员。如果您实际尝试“
class let value=1
”,您将看到“尚未支持的类变量”,但这似乎与您的问题无关。谢谢Andrew。我对原来的问题做了一个补充,显示了引导我在Swift中找到问题的Objective-C。我想你找到答案了。