如何在类似于Objective C的扩展中定义常量
目标C:
#define integerMax NSIntegerMax
夫特:
extension NSMutableArray {
let integerMax = Int.max // Doesn't work
答案 0 :(得分:6)
您可以将其添加为(只读)计算属性:
extension NSMutableArray {
var integerMax : Int { get { return Int.max } }
...
}
另见:https://stackoverflow.com/a/25428013/2274829
修改强>
更简洁的版本,如评论中所示:
extension NSMutableArray {
var integerMax : Int { return Int.max }
...
}
答案 1 :(得分:1)
您可以先定义常量。然后在扩展名
中使用它let integerMax = Int.max
extension NSMutableArray {
func someFunc() {
var someVar : Int = integerMax
//.....
}
答案 2 :(得分:0)
我认为Extensions与Obj-C中的Categories具有相同的约束,因为你不能添加新的实例变量(或者在这种情况下是常量)。
Obj-C中的#define与Swift中的let-generated常量不同。 #define是一个预处理器宏,它只是告诉编译器使用值对名称进行查找和替换。 let语句实际上是在类中创建一个新属性,您无法在扩展/类别中执行此操作。
在Obj-C中,您可以使用一些运行时魔法来使用关联对象来绕过它。我担心我不知道Swift的等价物,或者即使它是可能的。