写在前面的话:想深入学习Swift的朋友,推荐阅读国人翻译的《The Swift Programming Language》中文版 和 @onevcat 写的 Swifter - 100 个 Swift 必备 Tips、参与翻译的 函数式 Swift 这两本书
1.常量 & 变量
let a = 1
print(a)
var b = 2
print(b)
b = 3
print(b)
- 小结:
-
let
定义常量,不可更改 -
var
定义变量,可以更改 - Swift语句后不用加分号";"
- Swift中用
print()
代替OC中的NSlog()
- Swift中的
print()
比OC中的NSlog()
性能更强
-
2.定义对象
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//实例化UIView对象,设置frame
let testView = UIView(frame: CGRectMake(100, 100, 100, 100))
//设置颜色
testView.backgroundColor = UIColor.orangeColor()
//添加到主视图
view.addSubview(testView)
}
}
- 小结:
- 用
let
修饰,表示testView
的内存地址固定,不能修改,但是可以修改testView
的内部属性,比如颜色、尺寸等 - 访问Swift中当前对象的属性,不用写
self.
- 用
Swift中,尽量使用
let
修饰,有必要时才使用var
,可以使程序更加安全
3.数据类型
- 小结:
- Swift中会根据常量/变量的实际值自动推算其数据类型
- Swift没有OC中的
隐式类型转换
- 如果需要转换数据类型,必须进行
显式转换
- 小数默认是
Double
类型 - 整数默认是
Int
类型 - 注意
Double
和Int
首字母均为大写
- 小数默认是
- 如果要指定数据类型,可以在定义时使用
let/var 常量名/变量名: 类型 = 值
4.逻辑语句
4.1 简单的if
语句
if a > 0
{
print("Hello World")
}
- 小结:
- Swift中没有OC中
非零即真
的概念,所以逻辑判断中必须明确的写明判断条件
- Swift中
if
语句的()
可以省略,但{}
不能省略
- Swift中没有OC中
4.2 三目运算符
4.3 Optional(可选值)
let url = NSURL(string: "https://www.google.com")
按住alt(option)
键,点击url
,出现以下内容:
- 小结:
-
NSURL
后面的?
表示url是可选值,即可能有值也可能没有值 - 在世实际开发中需要对这样的值进行判断,否则编译器可能报错
- 因为OC中没有类似机制,所以当对象没有值时程序可能直接闪退,用户体验非常不好,这是Swift比OC优雅的地方
-
- 判断:
let url = NSURL(string: "https://www.google.com")
if url != nil
{
let requesr = NSURLRequest(URL: url!)
}
//或者:
if let url = NSURL(string: "https://www.google.com")
{
let request = NSURLRequest(URL: url)
}
5.循环
- 写法1:
for i in 0..< 10
{
print(i)
}
- 写法2:
for i in 0...9
{
print(i)
}
- 特殊写法:
for _ in 0...9
{
print("Hello World")
}
- 小结:
-
0..<10
表示0到9,不包括10 -
0...9
表示0到9 - Swift中
_
表示忽略
-
6.数组
6.1创建数组
let array1 = ["Hello", "World", 10]
let array2 = ["aa", "bb", "cc"]
let array3 = [1, 2, 3]
let array4 = [1.1, 2.2, 3.3]
print(array1)
for obj in array1
{
print(obj)
}
print(array1 as NSArray)
- 小结:
- 如果初始化时,所有内容类型一致,择数组中保存的是该类型的内容
- 如果初始化时,所有内容类型不一致,择数组中保存的是
NSObject
6.2基本操作
- 小结:
- 如果定义数组时指定了保存对象的类型,择不能向数组中添加其他类型的内容
- var 定义的数组是可变的
- let 定义的数组是不可变的
7.字典
8.字符串
Swift中推荐使用String类型,原因如下:
- 使用
String
的原因:-
String
是一个结构体,性能更高-
String
目前具有了绝大多数NSString
的功能 -
String
支持直接遍历
-
-
NSString
是一个OC
对象,性能略差 -
Swift
提供了String
和NSString
之间的无缝转换
-
9.函数
//没参数没返回值
func testFunc1() -> Void {
print("Hello World")
}
func testFunc1_1() { //没有返回值的话‘-> Void’可以省略
print("Hello World")
}
//没参数有返回值
func testFunc2() -> Int {
return 1
}
//有参数没返回值
func testFunc3(a : Int) {
print("Hello World")
}
//有参数有返回值
func testFunc4(a : Int, b : Int) -> Int {
return a + b
}
testFunc4(1, b: 2) //调用函数时第一个形参会省略
//强制显示形参
func testFunc5(x a: Int, y b: Int) -> Int {
return a + b
}
testFunc5(x: 1, y: 2)
//忽略形参
func testFunc6(a : Int, _ b: Int) -> Int {
return a + b
}
testFunc6(1, 2)
10.闭包 Closure
//完整写法
let closure1 : (String) -> Void = {
(name : String) -> Void in
print(name)
}
closure1("Hello World")
//没有返回值的写法
let closure2 : (String) -> Void = {
(name : String) in
print(name)
}
closure2("Hello World")
//没有参数没有返回值的写法
let closure3 : () -> Void = {
print("Hello World")
}
closure3()