簡體   English   中英

Swift NSObject子類符合Objective-C協議的問題

[英]Issue with conforming to Objective-C protocol from Swift NSObject subclass

這段代碼在Swift 1.1中可以正常工作

// Obj-C

@import Foundation;

@protocol HashableObject <NSObject>
- (NSUInteger)hash;
@end

// Swift

import Foundation

@objc class Object: NSObject, HashableObject {

    func hash() -> UInt {
        return 0
    }
}

但是,在最新的Swift 1.2和XCode 6.3beta2中,編譯器抱怨Method 'hash()' overrides Objective-C method 'hash' from superclass 'NSObject'

那是一個錯誤,還是其他根本改變了,代碼是錯誤的? 有什么解決方法嗎? 我的代碼中有很多東西需要符合Objective-C庫中的某些協議,這實質上是在沒有其他解決方案的情況下破壞一切,除了等待下一個Swift版本。

NSObject已經具有hash屬性

protocol NSObjectProtocol {
    var hash: Int { get }

而且,Swift 1.2檢測到這些錯誤的覆蓋。 從發行說明中:

Swift現在可以檢測Swift類型系統中的重載和重寫與通過Objective-C運行時看到的有效行為之間的差異。 (18391046,18383574)

例如,現在診斷出類中“屬性”的Objective-C設置器與其擴展名中的方法“ setProperty”之間存在以下沖突:

 class A : NSObject { var property: String = "Hello" // note: Objective-C method 'setProperty:' // previously declared by setter for // 'property' here } extension A { func setProperty(str: String) { } // error: method 'setProperty' // redeclares Objective-C method //'setProperty:' } 

在Swift 1.2(Xcode 6.3 beta 2)中,您可以覆蓋NSObjecthash屬性作為計算屬性:

class Object: NSObject {
    override var hash: Int {
        return 0
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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