Sen*_*ULL 7 closures objective-c ios objective-c-blocks swift
我的swift项目中有一个第三方Objective-C库,在.h文件中,它有一个typedef:
typedef void (^YDBlutoothToolContectedList) (NSArray *);
在课堂内,它有一个属性:
@property (nonatomic, copy) YDBlutoothToolContectedList blutoothToolContectedList;
(请忽略其拼写)
当我尝试在我的swift类中使用这个属性时,我会使用
bt.blutoothToolContectedList = {(_ tempArray: [Any]) -> Void in
self.devices = tempArray
self.tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)
我得到错误说:
Cannot assign value of type '([Any]) -> Void' to type 'YDBlutoothToolContectedList!'
我知道swift中的上述Objective-C代码将是:
typealias YDBlutoothToolContectedList = () -> Void
但我无法重写那个Objective-C文件和swift无法转换关闭类型,有没有可能的方法来解决这个问题?
Mar*_*n R 12
typedef void (^YDBlutoothToolContectedList) (NSArray *);
Run Code Online (Sandbox Code Playgroud)
映射到Swift as
public typealias YDBlutoothToolContectedList = ([Any]?) -> Swift.Void
Run Code Online (Sandbox Code Playgroud)
因为closure参数可以nil.(您可以通过选择.h文件,然后在Xcode菜单中选择Navigate-> Jump to Generated Interface来验证.)
因此,正确的任务将是
bt.blutoothToolContectedList = {(_ tempArray: [Any]?) -> Void in
// ...
}
Run Code Online (Sandbox Code Playgroud)
或者只是让编译器推断出参数类型:
bt.blutoothToolContectedList = { tmpArray in
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果可以为Objective-C定义添加可空性注释:
typedef void (^YDBlutoothToolContectedList) (NSArray * _Nonnull );
Run Code Online (Sandbox Code Playgroud)
那么它将被映射到Swift as
public typealias YDBlutoothToolContectedList = ([Any]) -> Swift.Void
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3536 次 |
| 最近记录: |