[英]But failed in Xcode 10.3 but work in Xcode 11.3
我有一段代码在 Xcode 11.3 中构建没有问题,但在 Xcode 10.3 中失败。 我认为这是因为 Xcode 10.3 没有所需的编译器。 该代码实现了在 Xcode 11.3 中不起作用但在 Xcode 10.3 中起作用的推送通知(与此有关- 这就是我想在 Xcode 10.3 中构建的原因)。 有什么我可以在 Xcode 10.3 中构建的吗?
用代码更新:
func signalRecipients(transaction: SDSAnyReadTransaction) -> [SignalRecipient] {
e164sForIntersection.compactMap { e164Number in
let address = SignalServiceAddress(phoneNumber: e164Number)
return SignalRecipient.registeredRecipient(for: address, mustHaveDevices: true, transaction: transaction)
}
}
在 Xcode 11.3 中没有错误。 在 Xcode 10.3 中:“无法推断复杂的闭包返回类型;添加显式类型以消除歧义”
var hasViewed: Bool { firstViewedTimestamp > 0 }
在 Xcode 11.3 中没有错误。 在 Xcode 10.3 中:“预期返回‘Bool’的函数中缺少返回值”。
我认为这种行为是由于 Xcode 10.3 的编译器造成的。 我可以以某种方式使用从 Xcode 11.3 到 Xcode 10.3 的编译器吗?
错误消息告诉您需要了解的内容。
第一个是对于 10.3 的类型干扰来说太复杂的表达式,所以给它一些类型。 像 e164Number in -> 任何类型。
第二个清楚地告诉您,您没有返回 bool 表达式。 看代码,真的,没有return语句。 所以添加一个return语句。
我认为这种行为是由于 Xcode 10.3 的编译器造成的。
当然可以。
我可以以某种方式使用从 Xcode 11.3 到 Xcode 10.3 的编译器吗?
不:您所做的是编写适用于两种编译器的代码。
让我们更清楚。 这仅与 Xcode 的版本间接相关。 真正重要的是Swift的版本。 随着语言的发展,不同版本的 Swift 有不同的编译器和不同的语言规则。
我们来看第二个:
var hasViewed: Bool { firstViewedTimestamp > 0 }
在 Xcode 11.3 中没有错误。 在 Xcode 10.3 中:“预期返回‘Bool’的函数中缺少返回值”。
正确的。 在 Swift 5.1 中引入了一条新规则,即在一行函数体中省略关键字return
是合法的。 但规则是新的,所以对于早期版本的 Swift,你仍然必须说旧的方式:
var hasViewed: Bool { return firstViewedTimestamp > 0 }
这对旧版本和新版本的 Swift 都有效,所以只要使用它,一切都会好起来的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.