加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:45:59 所属栏目:百科 来源:网络整理
导读: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 sel
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)

不知道如何处理上述内容而无需使用虚拟返回语句,任何建议.

这是我的班级测试

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)
    }
}

Not sure how to handle the above without having to have the dummy return statement,any advise.

你已经很好地解决了这个问题.匿名函数自动使用单行函数体作为返回值,因此为了防止导致类型与预期返回类型(Void)不匹配,您必须添加另一行代码,使其不是单行函数身体.虚拟返回语句本身返回Void,是处理它的好方法;我会用它并继续前进.有一些更狡猾的解决方法,但你拥有的正是我会做的.

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

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

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

现在结果不是虚空;它是一个可选的包裹空洞.这就是发生在你身上的事情;预期Void,但你的单行匿名函数返回一个Optional包装一个Void.通过添加另一行显式返回Void,您解决了问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读