NSTextAlignment 无法在 Objective-C 中表示

NSTextAlignment can not be represented in Objective-C

在我的 Swift class 中,我通过将变量定义为

向 objective c 公开了一个变量
@objc var textAlignment: NSTextAlignment? {
    didSet {
        if textAlignment != nil {
            label.textAlignment = textAlignment!
        }
    }
}

而且错了!因为编译器抱怨它不是可以在 Objective-C 中表示的类型。


但以下是正确的

var textAlignment: NSTextAlignment? {
    didSet {
        label.textAlignment = textAlignment!
    }
}

@objc var textAlignment: NSTextAlignment {
    didSet {
        label.textAlignment = textAlignment
    }
}

所以看起来如果我将方法公开给 objective-C,它就不能是可选值。但是,如果我在内部使用它,我可以!是因为它是一个标量值,在 Objective-C 中我们无法将其表示为 nil 吗?

我的意图只是想让它不是强制性的。

NSTextAlignment 是一个枚举,而不是 class - textAlignment 变量不能映射为 objective c 的可选变量,因为这需要它是一个指向对象类型的指针。

尝试:

@objc var textAlignment: NSTextAlignment { 
  ...
}

或者,如果你真的需要它是可选的,你可以将它作为 NSNumber 公开给 Objective C,包装 textAlignment.rawValue 或在不需要值时设置为 nil .