簡體   English   中英

使用 objc 的 swift 擴展和類型差異

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

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