【问题标题】:How to use Swift closure in OC如何在 OC 中使用 Swift 闭包
【发布时间】:2016-01-21 07:10:24
【问题描述】:

在 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 *的不兼容块指针类型 _Nonnull(^_Nullable)(void)'来自'char *(^)(void)'

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

【问题讨论】:

  • 抱歉,你说的 OC 是什么意思?
  • 我忘记了“Hello block”之前的@。这是一个粗心的错误。感谢您查看我的问题。

标签: ios objective-c xcode swift closures


【解决方案1】:

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

如果你声明块为^NSString*(){,那么你会得到一个错误,告诉你返回值不匹配,甚至建议你添加@

【讨论】:

  • 谢谢!我刚才发现了那个错误。这是一个粗心的错误!
猜你喜欢
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
相关资源
最近更新 更多