[英]Swift 2, method 'setOn' with Objective-C selector 'setOn:' conflicts with setter for 'on' with the same Objective-C selector
[英]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;
}
現在需要手動定義滲水劑嗎?
斯威夫特3測試版,使房產特殊處理與領先is
。 對於屬性isDefault
,Swift生成isDefault
作為getter和setDefault:
作為setter(不是setIsDefault:
。
在您的Objective-C代碼中使用setDefault:
@objc
或使其成為計算屬性並手動指定@objc
名稱。
(添加)“使其成為計算屬性”的含義如下:
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
比“使其成為計算屬性”要簡單一些。 請試試。
(UPDATE2)
蘋果員工已確認“這是一個已知問題,將在以后的Beta中修復:” https://github.com/apple/swift/pull/3254
這不是核心數據案例。 但是此修復程序也將適用於此問題。 (很遺憾,到目前為止,Xcode 8 beta 2不包含此修復程序。)
(Update3)在Xcode 8 beta 3發行說明中說,此功能已刪除,並且我已經確認,沒有@objc
屬性,Objective-C setter setIsDefault:
可用於Bool
屬性isDefault
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.