func testFunc(someFunc: (Int[]) -> ()) { someFunc([1,2,3])}func someFunc<T>(arr : T[]) -> T[] { return arr}func someOtherFunc<T>(arr : T[]) { println(arr)}// case 1 - ERRORtestFunc() { someFunc(testFunc { someFunc()}// case 2 - no errortestFunc() { println("whatever") someFunc()}// case 3 - no errortestFunc() { someOtherFunc()}testFunc { let x = someFunc(); return () } // returning VoID explicitly (with or without parenthesis)testFunc { someFunc(); 42 } // or,indeed,just adding a second ExpressiontestFunc { _ = someFunc() }testFunc { someFunc() }func testFunc<Ignored>(someFunc: [Int] -> Ignored) { someFunc([1,3])}testFunc { someFunc() }) ; } // with the trailing semicolon
看起来在情况1中,Swift试图从闭包中隐式返回,因为函数someFunc()返回一个值.只有在闭包中只有一行(单表达式闭包的隐式返回)时才会这样做 – 这就是案例2有效的原因.如果函数(如在情况3中为VoID),即它不返回值,则不执行此 *** 作.
我的问题是是否有一种方法可以抑制这种行为,这样我就可以在没有返回值的闭包中使用带有返回值的函数作为单行表达式.
除了提到的解决方案:您还可以使用返回的值:
或者干脆:
返回值必须始终是函数签名所承诺的类型,并且隐式返回的情况也不例外.这不是错误.简单地说,隐式返回通常是如此优雅的语法,不匹配类型的不太常见的情况是稍微破坏该咒语.这并不是说一个好的语法解决方案不会受欢迎,至少在预期VoID的时候.也许就像这样简单:
当这让我感到恼火时,最让我自己的功能迫使我围着它跳舞.我有几次使用显式忽略返回类型:
总结以上是内存溢出为你收集整理的抑制Swift中的隐式返回全部内容,希望文章能够帮你解决抑制Swift中的隐式返回所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)