2017-07-11 31 views
1

Objective-C的塊我已經在我的Objective-C代碼減速此block S:不能使用SWIFT

typedef void(^ActionStringDoneBlock)(ActionSheetStringPicker *picker, NSInteger selectedIndex, id selectedValue); 
typedef void(^ActionStringCancelBlock)(ActionSheetStringPicker *picker); 

我減速這block S IN的Objective-C的實例如下圖所示:

ActionStringDoneBlock done = ^(ActionSheetStringPicker *picker, NSInteger selectedIndex, id selectedValue) { 
    selectedVisa = (int) selectedIndex; 
    if ([visaView.textField respondsToSelector:@selector(setText:)]) { 
     [visaView.textField performSelector:@selector(setText:) withObject:selectedValue]; 
    } 
}; 

,並使用這個實例如下圖所示:

[ActionSheetStringPicker showPickerWithTitle:"myTitle" 
             rows:visaData 
          initialSelection:initialSelection 
            doneBlock:done 
           cancelBlock:cancel 
             origin:visaView.textField 
]; 

我的項目既用戶迅速和objecti ve-c代碼。現在我想用我的swift代碼中的新代碼ViewController來使用這些代碼。我用下面的代碼:

let done = {(picker: ActionSheetStringPicker?, selectedIndex:Int, selectedValue: Any?) in 

    //My Codes 

    } 

    let cancel = { 
     (_ picker: ActionSheetStringPicker) -> Void in 

    } 

    ActionSheetStringPicker.show(withTitle: "My Title", 
           rows: messageTitleData, 
           initialSelection: initialSelection, 
           doneBlock: done as ActionStringDoneBlock, 
           cancel: cancel as! ActionStringCancelBlock, 
           origin: messageTitle.textField 
    ) 

但我得到以下錯誤SWIFT代碼:

EXC_BREAKPOINT

我已經打印出來放done as ActionStringDoneBlock到控制檯的我看到下面的結果:

error: :3:1: error: cannot convert value of type '() ->()' to type 'ActionStringDoneBlock' (aka '(Optional, Int, Optional) ->()') in coercion

我也嘗試過如下定義done

let done = {(picker: Optional<ActionSheetStringPicker>, selectedIndex:Int, selectedValue: Optional<Any>) in 

    //My Codes 

    } 

但又有同樣的錯誤。有人對swift代碼中的問題有什麼想法嗎?

回答

3

你需要註釋的封閉類型和省略通過類型

let done : ActionStringDoneBlock = { (picker, selectedIndex, selectedValue) in ... } 

let cancel : ActionStringCancelBlock = { picker in ... } 

沒有註釋的封閉被視爲() ->()。這就是錯誤信息所說的。

相關問題