没有 setter 分配给 属性 swift 3 和 objective-c 的方法

No setter method for assignment to property swift 3 with objective-c

我在我的 swift 类:

之一中使用了以下代码
    import UIKit

public class BRUFIMobile: NSObject {

    public var mobileNumber : NSString?
    public var provider : NSString?
    public var aliasName: NSString?
    public var aliasName_en : NSString?
    @objc public var isDefault: Bool

    public override init() {
        self.isDefault = false
        super.init()
    }

}

我的项目包含 objective-c 和 swift 代码。该代码在 xCode 7 上运行良好,但现在通过更新到 xCode 8 我得到以下错误:

No setter method 'setIsDefault:' for assignment to property

我在我的 objective-c 代码中使用属性,如下所示:

   + (BRUFIMobile *) convertUFIMobileToBRUFIMobile:(UFIMobile *) ufimobile
{
    BRUFIMobile *brUFIMobile = [[BRUFIMobile alloc] init];
    brUFIMobile.mobileNumber = ufimobile.number;
    brUFIMobile.provider = ufimobile.provider;
    brUFIMobile.aliasName = ufimobile.aliasName;
    brUFIMobile.aliasName_en = ufimobile.aliasName_en;
    brUFIMobile.isDefault = [ufimobile.isDefault boolValue];

    return brUFIMobile;
}

现在是否需要手动定义 seetters?

Swift 3 beta 对前导 is 的属性进行了特殊处理。 对于 属性 isDefault,Swift 生成 isDefault 作为 getter 和 setDefault: 作为 setter(不是 setIsDefault:) .

在您的 Objective-C 代码中使用 setDefault:,或者将其设为计算 属性 并手动输入 @objc 名称。


(加法) "make it a computed property" 意思是这样的:

private var _default: Bool = false
public var isDefault: Bool {
    @objc(isDefault) get {
        return _default
    }
    @objc(setIsDefault:) set {
        self._default = newValue
    }
}

(更新) 据我测试,这似乎有效:

@objc(isDefault) public var isDefault: Bool

比"making it a computed property"简单一点。请尝试。


(更新 2)

Apple 员工已确认 "This is a known issue that will be fixed in a future beta:" https://github.com/apple/swift/pull/3254

这不是核心数据案例。但此修复程序也适用于此问题。 (很遗憾,就目前而言,Xcode 8 beta 2 不包含此修复。)


(更新3) Xcode 8 beta 3 Release Notes 中说此功能已删除,我已确认,没有 @objc 属性,Objective-C setter setIsDefault: 是适用于 Bool 属性 isDefault.