簡體   English   中英

沒有使用Objective-C分配給屬性swift 3的設置方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM