寫在前面的話:想深入學習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)
array1
array2
array3
array4
打印結果
- 小結:
- 如果初始化時,所有內容類型一致,擇數組中保存的是該類型的內容
- 如果初始化時,所有內容類型不一致,擇數組中保存的是
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()