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代碼中的問題有什麼想法嗎?