繁体   English   中英

但在 Xcode 10.3 中失败,但在 Xcode 11.3 中工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM