3

当我尝试使用Foundation 中的 struct URLRequest时,使用 swift 5.1.1 进行编译时出现错误。相同的代码适用于 swift 5.0.1。

示例:给定文件 Foo.swift 的内容

import Foundation
print(URLRequest.self)

使用 Swift 5.0.1 我们得到

$ docker run --rm -v "$PWD:/app" swift:5.0.1 sh -c \
     'swiftc /app/Foo.swift && ./Foo'
URLRequest

但随着 5.1.1

$ docker run --rm -v "$PWD:/app" swift:5.1.1 sh -c \
     'swiftc /app/Foo.swift && ./Foo
Foo.swift:2:7: error: use of unresolved identifier 'URLRequest'
print(URLRequest.self)
      ^~~~~~~~~~

我似乎找不到任何提及 Foundation 相关更改的内容,而且https://github.com/apple/swift-corelibs-foundation上的源代码看起来也很稳定。

这里发生了什么,是否有解决方法?

4

1 回答 1

15

这是由于最近将网络相关对象转移到新的FoundationNetworking模块中造成的。Darwin 上不存在新模块,因此必须使用预处理器命令使代码在所有支持的平台上工作:

import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif

print(URLRequest.self)

这段代码可以使用上面给出的两个 docker 命令编译得很好。

于 2019-10-29T11:24:53.053 回答