不能使用SWIFT
问题描述:
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代码中的问题有什么想法吗?
答
你需要注释的封闭类型和省略通过类型
let done : ActionStringDoneBlock = { (picker, selectedIndex, selectedValue) in ... }
let cancel : ActionStringCancelBlock = { picker in ... }
没有注释的封闭被视为() ->()
。这就是错误信息所说的。