例如,此代码段取自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
子>
答案 0 :(得分:4)
您可以通过为typealias
,NSError
创建NSErrorRef
来实现此目的。然后,您将在整个班级中引用此类型,因为NSError
现在将引用属性,而不是类。
public typealias NSErrorRef = NSError
的
public class MyClass {
public var NSError:NSErrorRef {
return NSErrorRef(domain: "", code: 0, userInfo: nil)
}
}
但是,我从不推荐这个。
我怀疑CGColor
在UIColor
的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)
}
}