目录
Swift
苹果于2014年推出Swift, 一种更像脚本的语言,不失效率。既拥有C和ObjC的特性,又更加灵活有趣。Swift的设计目标是为了替代Objective-C,正在逐渐成为Mac和iOS主流开发语言。Swift推出了包括编程范式、函数式编程、闭包、泛型等一些列特性。
Swift历史
Swift的诞生不得不提Chris Lattner, 他是LLVM的主要发起人之一,当年苹果不满意GCC不买账苹果公司对GCC的”修改期望”, 一怒之下请他替换编译器后端为LLVM, 后面逐步到OS X10.9和 XCode 5将整个编译链从LLVM+GCC转变成LLVM+Clang.
Swift编程语言
Swift是苹果公司于2014年WWDC(苹果开发者大会)推出的一种新的编程语言,为了替代ObjC,它的设计目标是解决Objective-C的一些局限性和现代编程语言的需求,提供一种安全、快速、现代的编程语言,同时保持易用性和表现力。它吸收了多种编程语言的优点,如Python、Ruby、C#等,并加入了一些新的特性,如自动内存管理、函数式编程等。Swift将预期是iOS、macOS、watchOS和tvOS应用程序的首选开发语言。
Swift的特点
- 干净
保持C语言简洁特征,如果在适当位置加上括号,var/let用类型和const代替,类型不放在变量之后,Swift和C语言似乎没区别。 - 现代
Swift发布于2014年WWDC,鉴于ObjC是80年代产生,保留较多旧语言特征,在近几十年间,各种更现代化的高级语言和脚本语言诞生,ObjC是兼容C语言的,没法直接套用其它语言的优秀特性。Swift正为此需求而生,吸收了现代高级语言和脚本语言的优秀语法,coding更自然简洁高效。 - 安全
尽管ObjC并非多不安全,但它们依然保留C语言旧时代设计时带有的"易出错"的语法。Swift尽可能减少易出错的语法,减少未定义的行为,减少程序员因此产生的运行期不预期的行为。 - 性能
虽然Swift看起来像脚本,很多高级特性,但它是实打实的编译型语言,可以提供C/ObjC/C++近乎同等的性能。
平台支援
- 2014年,Xcode 6首次支持Swift beta测试版。
- 2015~2016年,苹果开始准备支持Linux平台的Swift 2.2版本,2016年发布正式版支持Linux平台。
- 2020年,Swift 5.3版本第一次官方支持Windows平台。
开源
2015年12月4日,苹果开放Swift编译器和库的源代码。
兼容性
- 苹果发布Swift语言,允许Swift和ObjC同时使用,Swift代码可以复用已有的Cocoa和Cocoa Touch框架。
Swift如何让整数计算溢出不抛出异常?
Swift提供了 &+、&-和&*三个溢出操作符,在发生溢出时,不抛出异常,而是正常运行下去。
swift和swiftc
安装好swift编译器,你可以会奇怪,作为一门编译型语言,swiftc是编译器很好理解,swift是什么? 它是REPL(Read-Eval-Print Loop)工具,提供一个交互式环境,允许直接输入Swift代码并立即看到结果。这对于快速测试代码片段或学习语言特性非常有用,可以在命令行窗口输入swift repl体验。
Swift可以和哪些语言交互?
ObjC和C语言是Swift默认很方便就可以交互的编程语言,C++过于复杂,Swift不提供直接交互的接口。
为什么Swift不允许字符串使用===判断?
===判断实例是否引用同一个引用,!==判断实例不指向同一个引用,它们只能用于类类型/引用类型,而字符串在Swift是值类型。
如何理解Swift的if let语句?
Swift允许if条件里面用let语句:
var a: Int? = 100
if let c = a, c > 50 {
print("a > 50")
} else {
print("a <= 50")
}
并不是如上的if条件不符合Swift语法,反而,Swift为了支持这种便捷的条件,表达式语法加入了let或var初始化。
condition-list → condition | condition ,
condition-list
condition → expression | availability-condition | case-condition | optional-binding-condition
case-condition → case pattern initializer
optional-binding-condition → let
pattern initializer? | var
pattern initializer?
Refer: If Statements | swift.org While Statements | swift.org
Swift权限控制
访问权限 | 描述 | 可见 | 可继承 |
open | 最高级别的访问权限,允许实体在所有模块被访问和继承 | 所有模块 | 所有模块 |
public | 允许实体在同一模块内以及模块外被访问,但不允许在其他模块中被继承 | 所有模块 | 同一模块 |
internal | 默认访问级别,允许实体在同一模块内被访问,但在模块外不可见 | 同一模块 | 同一模块 |
fileprivate | 实体的可见性限制在同一个文件中,文件外不可见 | 同一文件 | 同一文件 |
private | 最低访问级别,实体的可见性限制在闭合的声明中,如类、函数或方法 | 同一作用域 | 同一作用域 |
Swift字符串默认编码
Swift 5之前,有UTF-16(Unicode)和 ASCII 两种编码方式,Swift 5之后改成UTF-8编码格式。
为什么Swift枚举变量前面可以加符号"."?
当Swift枚举变量类型已经确定时,再被赋值时可以不指定枚举类型,而用符号.代表是枚举类型,这是一种简化的写法。
Swift Hello World程序
import Foundation
print("Hello, World!")
若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。