Swift:如何使用类声明属性'名称

时间:2016-05-18 10:18:47

标签: swift

例如,此代码段取自Swift中的UIColor定义:

// Access the underlying CGColor or CIColor.
public var CGColor: CGColor { get }

然而,尝试做同样的事情,让我们说NSError,在我自己的班级中会导致错误:

public class MyClass {
    public var NSError: NSError {
        return NSError(domain: "mydomain", code: 0, userInfo: [:])
    }
}

var行显示Use of undeclared type 'NSError'

这还有可能吗?有什么好方法可以做到这一点?

<子> Apple Swift 2.2版(swiftlang-703.0.18.1 clang-703.0.29)
目标:x86_64-apple-macosx10.9

1 个答案:

答案 0 :(得分:4)

可以通过为typealiasNSError创建NSErrorRef来实现此目的。然后,您将在整个班级中引用此类型,因为NSError现在将引用属性,而不是类。

public typealias NSErrorRef = NSError

public class MyClass {
    public var NSError:NSErrorRef {
        return NSErrorRef(domain: "", code: 0, userInfo: nil)
    }
}

但是,我从不推荐这个。

我怀疑CGColorUIColor的Swift头中以这种方式命名的唯一原因就是保持与Objective-C的互操作性。至于为什么它没有任何混乱的错误 - 我不能说。虽然,如果您实际查看UIColor的文档,您会看到CGColor is actually listed as cgColor(当选择Swift时) - 这表明即使Apple认为它没有正确定义!

在任何情况下,约定规定属性应以小写字母开头(为了防止这种混乱)。所以你可以这样做:

public class MyClass {
    public var nsError:NSError {
        return NSError(domain: "", code: 0, userInfo: nil)
    }
}

或者甚至更好,你可以命名你的属性error - 因为前缀应该很少在Swift中使用(除非你需要消除歧义 - 你实际上似乎需要在你的情况下做)。

public class MyClass {
    public var error:NSError {
        return NSError(domain: "", code: 0, userInfo: nil)
    }
}