我无法将此目标C转换为快速阻止 你可以在这里看到Code on Github,但我没有目标C的任何背景,所以我不太了解这个块,这里是代码
- (LinkedStringTapHandler)exampleHandlerWithTitle:(NSString *)title
{
LinkedStringTapHandler exampleHandler = ^(NSString *linkedString) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:title
message:[NSString stringWithFormat:@"Handle tap in linked string '%@'",linkedString]
delegate:nil
cancelButtonTitle:@"Dismiss"
otherButtonTitles:nil, nil];
[alert show];
};
return exampleHandler;
}
你可以在github https://github.com/evilBird/HBVLinkedTextView/blob/master/HBVLinkedTextViewExample/HBVLinkedTextViewExample/ViewController.m上看到这段代码,看看那段代码,我试图在swift中使用它来使用桥接头。我转换的所有东西,但这条线我不明白。
LinkedStringTapHandler exampleHandler = ^(NSString *linkedString)
这是我到目前为止所做的事情
func exampleHandlerWithTitler(title:NSString)->LinkedStringTapHandler {
exampleHandler: LinkedStringTapHandler = (linkedString:NSString) -> () {
// alert view code here
}
return exampleHandler (ERROR here Use of unresolved identifier exampleHandler)
}
答案 0 :(得分:1)
当Objective-C有块时,Swift有功能。所以这只是知道如何阅读Objective-C块语法的问题 - 不容易,我知道:
^(NSString *linkedString)
这意味着:“这是一个采用NSString参数的块(并且不返回任何内容)。”所以你想在这里提供一个带有NSString参数的Swift函数(并且不返回任何内容)。
换句话说,LinkedStringTapHandler的定义相当于在Swift中这样说:
typealias LinkedStringTapHandler = (linkedString:NSString) -> ()
因此,在您的代码中,您将形成该类型的函数并将其返回:
func f(linkedString:NSString) -> () {
// do stuff
}
return f
你可以用匿名函数做同样的事情,但这既不在这里也不在那里,真的。
答案 1 :(得分:0)
最后这是有效的
func exampleHandlerWithTitler(title:NSString)->LinkedStringTapHandler {
let exampleHandler: LinkedStringTapHandler = {(linkedString:String) in {
// alert view code here
}
return exampleHandler
}