将 swift 闭包作为 属性 存储在 objective-c class 上,其中块是使用 typedef 声明的
Store a swift closure as a property on an objective-c class where the block is declared using a typedef
天哪,我这辈子都做不到。
- 我在 objective-c 中有一个
typdef
,看起来像这样:
typedef void (^StringBlock)(NSString * string);
- 我有一个 objective-c class 有一个 属性 允许你存储你自己的
StringBlock
类型的块。 属性 在 objective-c 中声明如下:
@property (nonatomic, copy) StringBlock onTextSubmitBlock;
- 在 objective-c 中为其分配块如下所示:
input.onTextSubmitBlock = ^(NSString * text) {
};
- 我想在 Swift class 中做同样的事情!我最接近有效的方法是:
input!.onTextSubmitBlock = {(StringBlock) in
}
可以编译,但我无法访问我需要的参数((NSString * text)
in objective-c...)
我相信一旦我习惯了 Swift 这将是显而易见的,但我错过了什么?
你很接近。您应该可以像这样使用它:
input!.onTextSubmitBlock = { text in
println(text)
}
Swift 将从声明中推断出 text
是一个 NSString
。 Thera 是您也可以声明的几种替代方法。像这样:
input!.onTextSubmitBlock = {
println([=11=]) // [=11=] is text
}
还有这个:
input!.onTextSubmitBlock = { (text: NSString) -> () in
println(text)
}
天哪,我这辈子都做不到。
- 我在 objective-c 中有一个
typdef
,看起来像这样:
typedef void (^StringBlock)(NSString * string);
- 我有一个 objective-c class 有一个 属性 允许你存储你自己的
StringBlock
类型的块。 属性 在 objective-c 中声明如下:
@property (nonatomic, copy) StringBlock onTextSubmitBlock;
- 在 objective-c 中为其分配块如下所示:
input.onTextSubmitBlock = ^(NSString * text) {
};
- 我想在 Swift class 中做同样的事情!我最接近有效的方法是:
input!.onTextSubmitBlock = {(StringBlock) in
}
可以编译,但我无法访问我需要的参数((NSString * text)
in objective-c...)
我相信一旦我习惯了 Swift 这将是显而易见的,但我错过了什么?
你很接近。您应该可以像这样使用它:
input!.onTextSubmitBlock = { text in
println(text)
}
Swift 将从声明中推断出 text
是一个 NSString
。 Thera 是您也可以声明的几种替代方法。像这样:
input!.onTextSubmitBlock = {
println([=11=]) // [=11=] is text
}
还有这个:
input!.onTextSubmitBlock = { (text: NSString) -> () in
println(text)
}