不使用Mac学习Swift : 编译,生成&运行Swift代码

・11 分钟阅读

介绍

最近,我非常渴望能够编写一些Swift代码,而无需使用Mac。Swift是一个开源语言,所以,我希望能做到,然后我去google搜索了一下。

我偶然发现了一个Infoworld文章(Swift for Windows终于到了,但作为非官方port| InfoWorld [^]),有一个链接到GitHub repo,它有预先构建的二进制文件,据说可以帮助我编译,构建和运行Swift代码。我认为它值得一试)。

我很震惊它实际上可以工作了

我按照GitHub链接的神秘步骤,编写最基本的Swift测试代码,编译,构建它并运行它,我无法相信它实际上已经将我的Swift代码变成了一个诚实的Windows EXE!

先决条件&警告

GitHub链接中的信息提到了在Windows上构建Swift所需的一些内容,我想在这里提及这些以及其他一些东西,这样,你就明白为什么不希望自己在Windows上构建iOS应用程序。它不允许你这样做,它允许你学习Swift语法和一些Swift API,但是你不能编写iOS应用程序,最终结果是一个运行有限Swift代码的Windows二进制代码。

  • 需要您的机器运行64位处理器,才允许使用编译和构建Swift代码的二进制文件
  • 你将需要C++ Redistributable for Visual Studio 2015
  • 你必须安装了Visual Studio 2015 SDK ,
  • 这些需求的真正含义是什么?
  • 正在运行64位机器,
  • 确保你安装了Visual Studio 2015社区版

我在VM中运行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开发,

我需要一个REPL

这个代码完全与我在应用程序中所做的一样,我知道如果可以把这些纯函数写入Xcode项目。

我只需要一种通过一些纯粹的Swift代码来REPL的方法,这个环境会给你。构建Swift,并且运行实际的Windows EXE也是很酷的,我发现它很有趣,很刺激。

阅读更多关于REPL的含义: read-eval-print循环-维基百科 [^]

那是你从中得到的东西。现在,让我们来看看如何设置它。

我的安装

我假设您有一台运行现代版Windows的64位计算机,并且您已经安装了Visual Studio Community 2015以及与之相关的所有内容(C Redistributable和SDK)。如果您只是选择完整安装,那么您将获得它。

GitHub -主要位置

您想要获取使用的二进制文件的GitHub站点位于:

Swift for Windows (MSVC ),tinysun212/swift Windows ,GitHub [^],

链接还提供了设置Swift编译器所需做的简单步骤。

我复制了这些步骤作为图像,以便我们可以对它们进行讨论:

Swift Win install

这里是从GitHub pull zip 的直接链接:https://github.com/tinysun212/swift-windows/releases/download/swift-msvc-20160418/swift-msvc-20160418-bin.zip

在你得到它,并且解压缩之后,只需完全按照它告诉你的每一步。

另外,注意最后一个说明"在C:/Program Files/Swift/bin中复制swift.exeswiftc.exe 。",

这实际上意味着将它从swift.exe重命名为swiftc.exe这是Swift编译器可执行文件。

更新环境变量的路径重要性

这也是为什么你要确保你的路径(在控制台时)指向这个swiftbin目录的原因。

如果没有设置,那么当你去编译一个Swift文件时,系统会找不到swiftc.exe (Swift编译器),你会得到一个命令行错误。

我将让您看看如何更新路径变量。我建议你在控制面板上进行.... 系统..(如下图所示):

environment vars

最后,准备编译

如果你已经成功地遵循了这几个步骤,那么你就可以编写一些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本机工具命令提示符(查看侧边栏和下一幅图片),
  • 键入以下命令来编译代码: c:
  • 如果你击中
  • 执行目录列表,你将看到创建了一个文件,文件将命名为: 1st.obj
  • 文件是表示你的Swift代码的二进制机器代码,但是,它还没有与将告诉Windows这是可执行代码的机器代码链接起来,现在,我们需要运行链接器,
  • 链接器可通过Visual Studio x64本机工具comamnd提示符获得,现在你需要运行以下命令将1 st.obj转换为1 st.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

复制命令,将它粘贴到命令提示符中,然后点击< ENTER> 。

如果一切都按照你所看到的方式去做:

linker console

现在,你将有一个名为1st.exe的新文件。

#########################################################################

侧边栏:Visual Studio x64本机工具提示

你必须打开这个特定的命令提示,以便你可以使用相关的Visual Studio工具,在这种情况下,我们需要的是链接器。

请注意,有许多Visual Studio命令提示,一定要选正确的。

visual studio tools command prompt

#########################################################################

运行1st.exe

键入第一个你将看到如下内容:

1st exe result

如果所有这些都顺利的话,那么你可以编写,编译,链接和运行任何Swift文件。

更详细地查看编译命令

既然已经完成了这一切,那么让我们仔细看看编译命令,这样我们就能理解我们做了什么,以及如何将它用于其他Swift文件。

编译时只需启动Swift编译器,它是名为swiftc的可执行文件,以获取文件作为输入,并且生成obj文件。

通过向swiftc提供-c来指示要编译的input file并通过给它提供-o.来告诉它输出文件

另一个包含Swift类的例子

下面是一些例子代码(也附加到本文),其中我创建了Book类。

// book.swiftclass 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上编译。

历史记录

本文的首次发布和例子代码: 2016-10-26

讨论
Ayn profile image