目标C阻止快速阻止

时间:2015-05-15 16:17:49

标签: ios objective-c swift

我在使用swift调用方法的目标C中编写方法时遇到了麻烦。我已经正确设置了所有标题,并且简单的方法正在运行但是我不知道如何编写此块的目标C端。

我的快速课程

我试图打电话的功能:

func getOrders(completionHandler: (responseObject: NSString?) -> ()) {
    makeCall(completionHandler)
}

我如何在swift中(以及我想在Objective-C中做什么):

getOrders() { responseObject in
            // use responseObject and error here
            println("responseObject = \(responseObject); error = ")
            return
        }

这是我对 objective-C 阻止的尝试:

[billingService getOrders:completionHandler:^(NSString * responseObject) {
    NSLog(@"objective c callback: %@",responseObject);

}];

通过上述内容我可以使用未声明的标识符' completionHandler'

我只是不确定如何使这项工作或在目标c中构建一个正确的块。

1 个答案:

答案 0 :(得分:5)

如果您不确定如何在Objective C中使用Block,请查看以下链接: http://fuckingblocksyntax.com/http://goshdarnblocksyntax.com/ - SFW替代方案)

要恢复: 作为局部变量:

returnType (^blockName)(parameterTypes) = ^returnType(parameters) {...};

作为财产:

@property (nonatomic, copy) returnType (^blockName)(parameterTypes);

作为方法参数:

- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;

作为方法调用的参数:

[someObject someMethodThatTakesABlock:^returnType (parameters) {...}];

作为typedef:

typedef returnType (^TypeName)(parameterTypes);
TypeName blockName = ^returnType(parameters) {...};

如果你需要帮助在swift中使用block,请使用此链接: https://thatthinginswift.com/completion-handlers/

Objective-c

- (void)hardProcessingWithString:(NSString *)input withCompletion:(void (^)(NSString *result))block;

    [object hardProcessingWithString:@“commands” withCompletion:^(NSString *result){
        NSLog(result);
    }];
}

斯威夫特

func hardProcessingWithString(input: String, completion: (result: String) -> Void) {
    …
    completion(“we finished!”)
}

hardProcessingWithString(“commands”) {
    (result: String) in
    println(“got back: (result)“)
}

因此,对于您的问题,可能是:

[billingService getOrders: ^(NSString * responseObject) {
    NSLog(@"objective c callback: %@",responseObject);

}];

希望它有所帮助!