[英]using swift extension from objc, and type difference
我在模擬器 iphone6 及更高版本上收到以下錯誤。
發現多個名為“intValue”的方法的結果、參數類型或屬性不匹配
在模擬器 5 及以下,沒有錯誤。
違規代碼是
int destinationType = [[args objectForKey:@"destinationType"] intValue];
我懷疑這是由於我添加的快速擴展
extension NSNull {
func intValue() -> Int {
return 0
}
}
那么我應該擔心代碼不會在模擬器 6 及更高版本上編譯嗎?
** 編輯 **
似乎區別在於 iPhone 5 及以下為 32 位,而 iPhone5s 及以上為 64 位。
所以我應該返回比 Int 更精確的類型,它可以是 int32 或 int64。
現在我的代碼如下所示,想知道它是否是正確的解決方案
func intValue() -> Int32 {
return 0
}
Objective-C 方法需要一個 C int
。 但是 Swift Int不是C int
。 因此,指定的Int32是正確的,因為這是一樣的int
,也因為它是什么的其他實現intValue
回報。
當然,這帶來了一個事實,即方法名稱intValue
已經在 Objective-C 中使用。 Objective-C 沒有重載,所以如果你要選擇這個名字,你必須匹配現有的簽名(就像你現在所做的那樣)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.