在Swift类中,我将一个变量定义为

@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中,我们无法将它表示为零吗?
我只是想让它不是强制性的。

最佳答案

NSTextAlignment是枚举,而不是类-textAlignment变量不能作为可选变量映射到目标c,因为这需要它是指向对象类型的指针。
尝试:

@objc var textAlignment: NSTextAlignment {
  ...
}

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

10-02 18:56