目标c来快速阻止

时间:2015-01-25 15:10:10

标签: objective-c swift objective-c-blocks

我无法将此目标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)
}

2 个答案:

答案 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 
}