Swift编程语言入门教程

Viewed 0

简介

Swift是专为iOS和OS X应用开发设计的新编程语言,基于C和Objective-C,但避免了C语言的一些兼容性约束。它采用安全的编程模式并添加现代功能,使得编程更简单、灵活且有趣。Swift的界面构建于广受欢迎的Cocoa和Cocoa Touch框架,展现了软件开发的新方向。

Swift已经发展多年,Apple基于现有编译器、调试器和框架作为其基础架构,通过ARC(自动引用计数)简化内存管理,框架栈则一直依赖Cocoa。Objective-C的进化支持了块、集合字面量和模块,允许现代语言框架无需深入修改即可使用。这些基础工作为在Apple软件开发中引入Swift铺平了道路。

Objective-C开发者会对Swift感到熟悉,因为它采用了Objective-C的命名参数和动态对象模型,并提供与Cocoa框架的无缝互操作性。在此基础上,Swift引入了许多新功能,结合了面向过程和面向对象的特性。

对于新程序员,Swift也很友好。它是工业级品质的系统编程语言,却具有脚本语言的易用性。支持Playground功能,允许程序员实验Swift代码并立即查看结果,无需构建和运行完整应用。

Swift集成了现代编程语言思想与Apple工程文化的智慧。编译器针对性能优化,语言则为开发优化,两者无需折中。从“Hello, world”开始学习,可以逐步过渡到整个系统开发,这使得Swift成为Apple软件开发者创新的源泉。

Swift是编写iOS和OS X应用的理想方式,并将持续引入新功能。

Swift入门

学习新语言通常从打印“Hello, world”开始。在Swift中,只需一行代码:println("Hello, world")。如果你有C或Objective-C经验,这个语法看起来熟悉。在Swift中,这就是完整程序,无需导入单独库来处理输入输出或字符串。全局范围代码作为程序入口,因此无需编写main()函数,也不需要在每个语句后加分号。

本入门将提供足够信息来完成编程任务。如果有不理解的地方,无需担心,后续内容会详细解释。建议在Xcode的Playground中打开本章,以便编辑代码并立即查看结果。

简单值

使用let定义常量,var定义变量。常量的值无需在编译时指定,但必须至少赋值一次,这意味着常量可用于命名在多个地方使用的值。例如,var myVariable = 42允许后续修改为50,而let myConstant = 42则不可变。

常量或变量的类型必须与赋值类型一致。编译器可以推断类型,例如myVariable被推断为整数。如果初始化值信息不足或没有初始化,可以在变量名后添加类型,如let explicitDouble: Double = 70。值不会隐式转换到其他类型,如需转换,需显式构造所需类型的实例,例如let widthLabel = label + String(width)

字符串中嵌入值更简单:使用反斜线和括号,如let fruitSummary = "I have \(apples + oranges) pieces of fruit."

创建数组和字典使用方括号,访问元素通过索引或键。例如,var shoppingList = ["catfish", "water", "tulips", "blue paint"],然后shoppingList[1] = "bottle of water"。空数组或字典可使用初始化语法let emptyArray = String[]()或简写shoppingList = []

控制流

条件控制使用ifswitch,循环使用for-inforwhiledo-while。括号可选,但主体大括号必需。在if语句中,条件必须是布尔表达式,不能隐含与0比较。

结合iflet处理可选值,可选值可包含值或nil表示不存在。例如,var optionalName: String? = "John Appleseed",然后在if let name = optionalName中未包装值。如果可选值为nil,条件为false,代码块被跳过。

switch支持多种数据类型和比较,不限于整数或相等测试。执行匹配后自动跳出,无需break。例如,根据蔬菜类型输出不同评论。

使用for-in迭代字典,提供键值对名称。例如,查找最大数字。while循环重复执行直到条件改变,do-while确保至少执行一次。

循环中可通过.....表示范围,..忽略最高值,...包含两端值。

函数与闭包

使用func声明函数,调用时使用函数名加参数列表,->分隔参数和返回类型。例如,func greet(name: String, day: String) -> String

函数可返回多个值通过元组,如func getGasPrices() -> (Double, Double, Double)。可变参数个数通过数组收集,如func sumOf(numbers: Int...) -> Int

函数可以嵌套,内嵌函数可访问外部函数变量,有助于组织代码避免复杂。函数是第一类型,可返回另一个函数或接受函数作为参数。

闭包是函数的特殊形式,无需名称,用大括号定义。使用in分隔参数和主体。闭包有多种简化写法,例如忽略参数类型或使用数字引用参数。

对象与类

使用class创建类,属性在类中声明为常量或变量,方法类似函数。创建实例通过在类名后加括号,使用点语法访问属性和方法。

类可通过init定义构造器设置初始值,self用于区分属性和参数。每个属性都需在声明或构造器中赋值。使用deinit定义析构器进行清理。

子类通过冒号分隔超类名继承,可重写超类方法需用override标记。属性可有getter和setter,在setter中可用newValue引用新值。使用willSetdidSet在设置值前后执行工作。

类方法参数名可用于调用,第一个参数默认省略外部名,可指定第二个名称。处理可选值时,使用?在操作符前,若值为nil则忽略后续操作,表达式结果为nil

枚举与结构

使用enum创建枚举,可拥有方法。原始值类型可指定,后续值自动递增。使用toRawfromRaw转换原始值和枚举值。

枚举成员值是实际值,原始值可选。在switch中可用点语法引用枚举成员。结构体使用struct创建,支持类似类的方法和构造器,但传递时为值拷贝。

枚举实例可关联值,相同成员实例可有不同值。例如,服务器响应可能返回结果或错误信息。

参考资料

  • Apple Swift编程语言入门教程:http://gashero.iteye.com/blog/2075324
  • The Swift Programming Language:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/
0 Answers