Swift:如何声明一个带有类名的属性

4
例如,这段代码摘自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行显示了使用未声明类型“NSError”

这还可能吗?有什么好的方法可以解决这个问题?

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


已确认使用简单的 Foo 类。 - R Menke
1个回答

4
您可以通过为NSError创建一个类型别名`typealias NSErrorRef = NSError`来实现此目的。然后在您的类中,您可以引用此类型别名,因为`NSError`现在将指向属性而不是类。
public typealias NSErrorRef = NSError

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

然而,我不会推荐这样做。

我怀疑在Swift头文件的UIColor中将CGColor命名为这种方式的唯一原因只是为了保持与Objective-C的互操作性。至于为什么它可以正常工作而没有任何混淆的错误——我无法说。虽然,如果你实际查看UIColor的文档,你会发现当选择Swift时,CGColor实际上被列为cgColor——这表明甚至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)
    }
}

这个类实际上是一个错误类,所以一个简单的error属性并没有太多意义。我想要提供访问器来获取NSError,因此有了这个问题。无论如何,感谢你的回答! - chakrit
1
@chakrit 噢,那么在那种情况下使用 nsError 就很有意义了,以消除歧义。很高兴能帮到你 :) - Hamish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接