簡體   English   中英

Swift3.0:不能調用非功能類型的值'((Selector!)-> Bool)!'

[英]Swift3.0: Can not call value of non-functional type'((Selector!)->Bool)!'

我必須將Swift 2.x代碼遷移到Swift 3.0。 在這種情況下,我發現了一個問題“無法調用非功能類型的值((Selector!)-> Bool)!”。 我用谷歌搜索,但沒有找到解決我問題的任何好的解決方案。

我有一門課,用Objective-C編寫:

@interface AEngineBool : AEngineData
 @property BOOL value; 
 @end

另一個視圖控制器類,我像這樣使用reactToSelector訪問

 let param: AnyObject = params[0]
 if param.responds(#selector(AEngineBool.value)) {
    let iType: Bool = param.value
// Something
}

並在我上面提到的param.response()點上出現錯誤。

如果我更改了if(param.responds(to:#selector(getter:AEngineBool.value))),那么我會得到錯誤的“ value(forKey :)”用法。

好的,看來您有3個問題:

  1. responds()使用了錯誤的簽名
  2. value是一個吸氣劑,應該這樣標記,並且
  3. “值”屬性名稱不明確。

看到這個:

if param.responds(to: #selector(getter: AEngineBool.value)){
     let iType = param.value // gives error 'value' is ambiguous
     // something?
}

但是,如果我在您的原始類上創建另一個BOOL屬性,則該屬性將具有更唯一的名稱:

@interface AEngineBool : NSObject
@property BOOL value;
@property BOOL uniquePropertyName;
@end

那么這一切都很好:

if param.responds(to: #selector(getter: AEngineBool.uniquePropertyName)){
      let iType = param.uniquePropertyName
      // something?
}

所以我認為value只是一般性的一句話,並與value(forKey :)和其他沖突...

在此處輸入圖片說明

也無法弄清楚XCode給出的錯誤,但是我會圍繞它進行編碼。 這對您的實施有用嗎?

    let param: AnyObject = params[0]
    if param is AEngineBool {
        let iType: Bool = param.value
        // something?
    }

暫無
暫無

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

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