微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

闭包中的隐式返回导致错误

如何解决闭包中的隐式返回导致错误

任何建议都不确定如何在没有虚拟return语句的情况下处理上述问题。

您已经很好地解决了问题。匿名函数自动使用单行函数主体作为返回值,因此,要防止这种情况导致类型与预期返回类型(Void)不匹配,您必须添加另一行代码,以使其不是 单行函数身体。伪返回语句本身返回Void,是处理它的 方法。我会用它继续前进。有一些时髦的解决方法,但是您所拥有的正是我会做的。

编辑:要了解类型不匹配的来源,请尝试以下操作:

struct Test {
    func voider() -> Void {}
}

let testMaybe = Optional(test())
let result = testMaybe?.voider()

现在result不是虚空了;这是包装空心的可选。那就是你正在发生的事。一个空值是预期的,但您的单行匿名函数返回一个包装空值的Optional。通过添加另一条显式返回Void的行,您解决了该问题。

解决方法

Error: Cannot convert the expression type (String,MyType) to ()

从以下代码

Test(method: {[weak self] (message: String) in self?.callback(message)},instance: self)

如果我添加一个return语句,它将起作用,并且错误消失了

Test(method: {[weak self] (message: String) in self?.callback(message); return},instance: self)

任何建议都不确定如何在没有虚拟return语句的情况下处理上述问题。

这是我的课程测试

public class Test { 
    private var instance: AnyObject?
    private var method: ((message: String) -> ())?

    public init(method: (String -> ())?,instance: AnyObject) {

    }
 }


编辑

我已经完成了一个基于操场的简约示例(请复制粘贴以进行测试)

class Test {

    private var _method: ((String) -> ())?

    weak private var _instance: AnyObject?

    init(method: (String -> ())?,instance: AnyObject?) {
        _method = method
        _instance = instance
    }
}

class Another {

    func register() {
        //this doesn't need a return
        Test(method: {(message: String) in self.callback(message)},instance: self)

        //this needs a return once I add [weak self]
        Test(method: { [weak self] (message: String) in self?.callback(message); return},instance: self)
    }

    func callback(message: String) {
        println(message)
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。