无需 Mac 学习 Swift:在 Windows 上编译、构建和运行 Swift 代码
想学习编写 Swift 代码,但还没有 Mac?现在你可以在 Windows 上编写和编译 Swift。设置过程仅需约 15 分钟。
引言
最近,我非常渴望找到一种无需 Mac 即可编写 Swift 代码的方法。Swift 是一种开源语言,所以我抱有希望,然后我进行了谷歌搜索。
不知怎的,我偶然发现了一篇 Infoworld 文章(Swift for Windows arrives at last, but as an unofficial port | InfoWorld[^]),其中包含指向 GitHub 仓库的链接,该仓库提供了预编译的二进制文件,声称可以帮助我编译、构建和运行 Swift 代码。我认为值得一试。
我震惊地发现它竟然真的有效
我遵循了 GitHub 链接上的晦涩难懂的步骤,编写了最基本的 Swift 测试代码,然后编译、构建并运行了它。我简直不敢相信它竟然把我的 Swift 代码变成了真正的 Windows EXE 文件!!!
先决条件与注意事项
GitHub 链接上的信息提到了在 Windows 上构建 Swift 所需的几项内容,我想在这里也提及这些以及其他一些事项,以免你抱有不切实际的期望,认为你可以在 Windows 上构建 iOS 应用。这样做不能让你做到这一点。它将允许你学习 Swift 语法和**部分** Swift API,但你将无法编写 iOS 应用。**最终结果是一个运行你有限 Swift 代码的 Windows 二进制文件。**
- 使用允许你编译和构建 Swift 代码的二进制文件需要你的机器运行 64 位处理器
- 你需要 Visual Studio 2015 的 C++ 可再发行组件
- 你必须安装 Visual Studio 2015 SDK。
所有这些要求到底意味着什么?
- 运行 64 位机器。
- 确保安装 Visual Studio 2015 社区版
我正在虚拟机中运行 Windows 2012 R2,并且安装了 Visual Studio 2015 社区版,然后我遵循了这些步骤(我们稍后会谈到),大约在 15 分钟内就完成了。
注意事项
这个过程到底能给你带来什么?
完成此操作后,你将能够编译和构建 Swift 代码。但是,你需要知道存在一些限制。
- 该过程能够编译 Swift 2.x 代码。似乎不支持 Swift 3.x 语法和命令。
- 并非所有库都可用。像 UIKit 和 Foundation 这样的库并不完全可用。
- 这会构建一个控制台应用程序。它不会构建任何图形用户界面。这纯粹是为了让你学习基本的 Swift 语法和方法等。
有什么好处?
有很多好处,但不可否认,它们主要适用于那些只想学习一些 Swift 代码但又不想立即购买 Mac 的人。
- 学习 Swift 语法
- 学习编写纯粹的 Swift,因为你只专注于 Swift——在学习时,最好只先专注于语言本身。这将使学习 Cocoa(iOS UI 库)和其他项目的干扰分离开来。
- 你学的语法和技能将直接应用于你将来构建 iOS 应用时编写的代码。
在 Windows 上构建 Swift 代码如何帮助了我
Swift(和 iOS)开发与 Windows 开发截然不同。我已经从事 Windows 软件开发超过 25 年了,但我才刚开始学习 iOS 开发。我有一个无头 Mac Mini,但它并不总是可用的,而我目前正在开发一个 iOS 应用(iPhone、iPad)。
我需要编写几个纯方法,它们基于解析 Swift 字符串并对其进行操作。你会发现,在 Swift 中通过字符串索引与 Windows 上的大多数库(JavaScript、C#、C++、VisualBasic)的索引方式大相径庭。
我需要一个 REPL
这段代码与我正在应用中做的事情完全无关,我知道如果我能得到一个 Playground,我就可以编写这些纯函数,然后将它们添加回我的 XCode 项目。
我只需要一种方法来 REPL 一些纯 Swift 代码,这个环境就可以提供给你。构建 Swift 然后运行真正的 Windows EXE 也非常酷。我觉得这很有趣,也很令人兴奋。
了解 REPL 的含义,请访问:Read–eval–print loop - Wikipedia[^]
这就是你将从中获得的东西。现在,让我们看看如何进行设置。
我为设置所做的假设
我假设你拥有一台运行最新版本 Windows 的 64 位机器,并且已经安装了 Visual Studio Community 2015 及其所有相关组件(C++ 可再发行组件和 SDK)。如果你选择完整安装,就会包含这些。我不确定我是否也安装了它们,因为我很久以前就安装了社区版,但它们都在那里。
GitHub - 主要位置
你需要获取二进制文件的 GitHub 网站是
Release Swift for Windows (MSVC) · tinysun212/swift-windows · GitHub[^]
该链接还提供了设置 Swift 编译器所需的简单步骤。
我将把这些步骤复制到一张图片中,以便我们可以讨论它们。
这是直接从 GitHub 下载 zip 文件的链接:https://github.com/tinysun212/swift-windows/releases/download/swift-msvc-20160418/swift-msvc-20160418-bin.zip
获取并解压后,请严格按照每个步骤进行操作。
另外,请注意最后一个步骤说“在 `C:/Program Files/Swift/bin` 中将 `swift.exe` 复制到 `swiftc.exe`。”
这实际上是**重命名**它,从 swift.exe 改为 swiftc.exe。这是 Swift 编译器可执行文件。
更新路径环境变量的重要性
因此,你还需要确保你的路径(在控制台模式下)指向这个 swift\bin 目录。
如果不是这样,那么当你尝试编译 Swift 文件时,系统将无法找到 Swiftc.exe(Swift 编译器),你将收到命令行错误。
我将让你自己查找如何更新路径变量。我建议你在“控制面板”……“系统”……(如下面的图片所示)中进行更新。
最后,准备好编译
如果你已成功遵循了这几个步骤,那么你就可以开始编译 Swift 代码了。
这是第一个示例,可以帮助你入门。
let message : String = "Compiling and running Swift code on Windows is easy."
print(message)
注意:CodeProject 编辑器中没有 Swift 选项,所以我将此代码设置为 Objective-C。
一些 Swift 语法确实与 C 非常相似。然而,其他语法是 Swift 独有的。
编译步骤
- 将上面的代码保存到一个名为 `1st.swift` 的文件中(或者下载本文档中的示例文件)。最好将其放在一个单独的文件夹中,以免文件与其他内容混淆。
- 在保存 `1st.swift` 文件的位置,打开 Visual Studio x64 Native Tools 命令提示符(参见侧边栏和下面的下一张图片)。
- 输入以下命令来编译代码:c:\> swiftc -c 1st.swift -o 1st.obj <回车>
- 如果一切正常,当你按下 <回车> 时,你只会看到命令提示符再次出现。
- 执行目录列表,你会发现创建了一个文件。该文件将被命名为:`1st.obj`
- 该文件代表你的 Swift 代码的二进制机器代码。然而,它尚未链接到告诉 Windows 这是一个可执行文件的机器代码。现在,我们需要运行链接器。
- 链接器可以通过 Visual Studio x64 Native Tools 命令提示符访问。现在你需要运行以下命令,将 1st.obj 转换为 1st.exe,这将运行我们的代码。
link /out:1st.exe 1st.obj libswiftCore.lib libswiftSwiftOnoneSupport.lib /LIBPATH:"C:/Program Files/Swift/lib/swift_static/windows" /MERGE:.rdata=.rodata /FORCE:MULTIPLE /IGNORE:4006,4049,4217
复制该命令,粘贴到你的命令提示符中,然后按下 <回车>。
如果一切顺利,你会看到类似这样的内容。
现在,你将拥有一个名为 `1st.exe` 的新文件。
#########################################################################
侧边栏:Visual Studio x64 Native Tools 命令提示符
你必须打开这个特定的命令提示符,以便相关的 Visual Studio 工具可供你使用。在这种情况下,我们需要的是链接器。
请注意,有许多 Visual Studio 命令提示符。确保选择正确的那个。
#########################################################################
运行 1st.Exe
输入 1st <回车>,代码就会运行。你将看到类似这样的内容。
如果这一切都顺利,你就可以开始编写、编译、链接和运行任何 Swift 文件了。
更深入地了解编译命令
现在你已经设置好了一切,让我们更仔细地看看编译命令,以便我们理解我们做了什么以及如何将其用于其他 Swift 文件。
对于编译,你只需启动 Swift 编译器,即名为 `swiftc` 的可执行文件,它接受一个文件作为输入并生成一个 obj 文件。
你通过向 swiftc 提供 `-c` 来指示要编译的**输入文件**,并通过给出 `-o` 来告诉它**输出文件**。
包含 Swift 类的另一个示例
这是本文附带的一个示例代码,我在其中创建了一个 `Book` 类。
// book.swift
class Book{
let author : String
let title : String
let pageCount : Int
init (_ author : String, _ title : String, _ pageCount : Int){
self.author = author
self.title = title
self.pageCount = pageCount
print ("\(author) wrote \(title) which is \(pageCount) pages long")
}
}
let b = Book("Matt Neuburg", "iOS 9 Programming Fundamentals with Swift", 604)
因此,如果我们想编译附带的 `book.swift` 文件,你将向命令行提供以下内容。
swiftc -c book.swift -o book.obj
链接器
这将生成 book.obj 文件,需要进行链接,然后我们将使用以下命令运行链接器。
c:\swiftCode>link /out:book.exe book.obj libswiftCore.lib libswiftSwiftOnoneSupport.lib /LIBPATH:"C:/Program Files/Swift/lib/swift_static/windows" /MERGE:.rdata=.rodata /FORCE:MULTIPLE /IGNORE:4006,4049,4217
请注意,这次我将链接器的 `/out:` 参数更改为 book.exe,以便我的可执行文件名为 book.exe。我还需要提供要链接的输入 obj 文件,该文件名为 `book.obj`。
有了这两个示例,你应该就能顺利编写自己的 Swift 代码并在 Windows 上进行编译了。
额外资源
如果你打算在学习构建 iOS 应用的同时学习纯粹的 Swift,我强烈推荐以下书籍。
iOS 9 Programming Fundamentals with Swift: Swift, Xcode, and Cocoa Basics: Matt Neuburg - Amazon.com: Books[^]
你可以使用这本书来学习核心 Swift 语法和编码。它包含很多小型但非常好的示例,非常适合与这个控制台编译器一起使用。
《Swift for Developers》这本书也不错:Swift for Programmers (Deitel Developer Series): Paul Deitel, Harvey Deitel - Amazon.com: Books[^]
历史
本文及示例代码的**首次发布**时间:2016-10-26