如何在OC

时间:2016-01-21 07:10:25

标签: ios objective-c xcode swift closures

在Swift UIViewController中,我的代码:

import Foundation
import UIKit

typealias SayHello = ()->String

@objc class SwiftViewController:UIViewController{

var sayHello:SayHello?

override func viewDidLoad() {

    super.viewDidLoad()

    if let helloClosure = sayHello{
        helloClosure()
    }
}}

在我的OC UIViewController中,我的代码:

swiftViewController.sayHello = ^(){

    return "Hello block";
};

Xcode编译OC文件时,它显示错误:

  

分配给'NSString *的块指针类型不兼容   _Nnnull(^ _ Nullable)(void)'来自'char *(^)(void)'

错误在哪里......(对不起,我在OC文件中的“Hello block”之前忘记了@。这是一个不小心的错误。现在它工作正常。谢谢!)

1 个答案:

答案 0 :(得分:1)

您忘记了@之前的"Hello block",因此您返回了一个C字符串,并且由于您没有明确指定该块的返回类型,因此编译器将其推断为{ {1}},显然与char*不兼容。

如果您将该块声明为NSString*,那么您将收到错误消息,告知返回值不匹配,甚至建议您添加^NSString*(){