2017-07-11 32 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 ... } 

没有注释的封闭被视为() ->()。这就是错误信息所说的。

相关问题