[英]Can not use Objective-c block in swift
我已在我的Objective-C代碼中減速了此block
:
typedef void(^ActionStringDoneBlock)(ActionSheetStringPicker *picker, NSInteger selectedIndex, id selectedValue);
typedef void(^ActionStringCancelBlock)(ActionSheetStringPicker *picker);
我在Objective-C中減速了這個block
的實例,如下所示:
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
];
我的項目用戶同時使用swift和Objective-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
)
但是我在快速代碼中得到以下錯誤:
EXC_BREAKPOINT
我已經將done as ActionStringDoneBlock
打印到控制台,我看到以下結果:
錯誤::3:1:錯誤:無法強制轉換類型'()->()'的值到類型'ActionStringDoneBlock'(aka'(Optional,Int,Optional)->()')
我也嘗試定義done
,如下所示:
let done = {(picker: Optional<ActionSheetStringPicker>, selectedIndex:Int, selectedValue: Optional<Any>) in
//My Codes
}
但是又遇到了同樣的錯誤。 有人對快速代碼中的問題有任何想法嗎?
您需要注釋閉包類型並忽略傳遞的類型
let done : ActionStringDoneBlock = { (picker, selectedIndex, selectedValue) in ... }
let cancel : ActionStringCancelBlock = { picker in ... }
沒有注釋的閉包將被視為() -> ()
。 這就是錯誤消息的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.