扩展中的Swift #define

时间:2014-06-18 08:51:10

标签: swift

如何在类似于Objective C的扩展中定义常量

目标C:

#define integerMax NSIntegerMax

夫特:

extension NSMutableArray {
      let integerMax = Int.max  // Doesn't work

3 个答案:

答案 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的等价物,或者即使它是可能的。