没有使用objective-c赋值给swift属性的setter方法

我在我的一个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; } 

现在是否需要手动定义字符?

斯威夫特3testing版使领先的属性特别处理。 对于属性isDefault ,Swift生成isDefault作为getter和setDefault:作为setter(不是setIsDefault:

在您的Objective-C代码中使用setDefault:或者使其成为计算属性并手动给出@objc名称。


(另外)“使它成为一个计算的属性”就是这样的意思:

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

(更新)据我testing,这似乎工作:

 @objc(isDefault) public var isDefault: Bool 

比“使其成为计算属性”更简单一些。 请尝试。


(UPDATE2)

苹果的工作人员已经确认,“这是一个已知的问题,将在未来的testing版中修复:” https://github.com/apple/swift/pull/3254

这不是核心数据的情况。 但是修复程序也适用于这个问题。 (可惜的是,到目前为止,Xcode 8 beta 2并没有包含这个修补程序。)


(Update3)在Xcode 8 beta 3 Release Notes中说这个特性已经被删除,并且我已经确认没有@objc属性,Objective-C setter setIsDefault:可用于Bool属性isDefault