Program
Program = Data Structure + Algorithm
Code
set of statements
Statement
1. 多個 statement 寫在一行時,以分號 ; 來區分
2. compiler 可以分號(;)或空白字元來識別statement
Variable / Constant Naming 命名
Swift 採用 unicode,Variable / Constant 的 name 可使用中文、符號等。
合法的 Naming 原則:
1. case sensitive 大小寫有區分,例如: Book 與 book 為不同的識別字 Identifier
2. 首字可為底線 underline _ 或者字母開始,但不能是數字
3. 除首字外,identifier 中的字符可用 underline _ , 字母或是數字
4. 不可使用Swift 已定義的關鍵字(Keyword)
Swift 語言非常特別,每個字符採用 Unicode 編碼。
Naming 命名中不可使用:
1. 數學符號
2. 箭頭
3. 保留字
4. 非法 Unicode 字元
5. 連線與制表符號[1]
但,若要引用保留字作為 Variable / Constant 的名稱時,需用反引號(`)來含括。
var `var` = "hello, world" // type inference
printf("The code: \(`var`))
關鍵字 Keyword
1. 與宣告 Declaration 有關的 keyword: class、deinit、enum、extension、func、import、init、let、protocol、static、struct、subscript、typealias、var
2. 與 Syntax 有關的 Keyword: break、case、continue、default、do、else、fallthrough、if、in、for、return、switch、where、while
3. 表達式與類型 Keyword: as、dynamicType、is、new、super、self、Self、Type、__COLUMN__、__FILE__、__FUNCTION__、__LINE__
4. 在特定上下文中使用的 Keyword: associativity、didSet、get、infix、inout、left、mutating、none、nonmutating、operator、override、postfix、precedence、prefix、rightset、unowned、unowned(safe)、unowned(unsafe)、weak、willSet
Variable / Constant 宣告
Variable 被宣告定義後,其值可變更,但,Constant 常數顧名思義,一經宣告後,不能變更其值。
當 Variable 變數確定好data type 資料型態後,就不能再儲存另一種資料型態。
Variable 變量、變數:
var varName = initValue
var varName:dataType
var varName:dataType = initValue
變數 variable 命名 一般首字詞為小寫,若有多個字詞,其他字詞首字母為大寫,例如:
var studentName:String
Constant 常量、常數:
let constName = initValue
let constName:dataType = initValue
常數 Constant 命名 一般為大寫,而以底線 underline (_)來連結兩個字詞,例如:
let OMEGA_CONSTANT = 0.56714
1. 靜態語言(例如 Java)的 Variable 的 data type 在 compile 階段就確定,但動態語言 (例如 swift) 則在 Run Time 階段才確定。
2. Swift 是安全性強的語言,Variable 與 Constant 都會指定唯一 data type,但允許以 顯性 / 隱性方式宣告其 data type
3. 若以隱性方式宣告 data type 時, Variable / Constant 需給 init value
4. Variable / Constant 一經指定 data type,其 data 的 type 是不允許以 cast 或任何方式更改
5. 多個 Variable / Constant 被宣告在同一行,則以逗號 (,) 區隔
Variable / Constant Init 初始值
Variable 可宣告 data type,之後程式再設定 init value 即可, 例如:
var x //不合法
var x = 100 //合法,Swift 推論 infer 這變數 x 的 data type 為 Int
var x: Int //合法,已宣告此變數的 data type 為 Int,程式稍後給初始值即可
但,Constant 宣告時,必須設定初始值,例如:
let X //不合法
let X: Int //不合法
let X = 100 //合法,隱性方式宣告
let X: Int = 100 //合法
亦可使用下列語法將變數包含在字串中:
let myNumber = 10
let myString1 = "Number is \(myNumber)"
let myString2 = "Number is \(myNumber + 8)"
String 的 cat 操作
1. String1 + String2 + ...
2. String1 + toString(variable/constant/...)
3. "String \(variable/constant)"
Data Type 數據類型
1. 整數類型 Integer
2. 浮點類型 Floating Point
3. 布爾類型 Boolean
4. 字符/字串類型 Character / String
5. 特殊類型 (位元組 Byte、可選類型)
Data Type 都是以大寫字母開頭
Variable / Constant 在 initialize 初始值設定時,要注意 data type 的值域範圍。
整數類型:
1. Signed Integer: Int8 (Byte / SingedByte)、Int16 (ShortFixed)、Int32 (Int)、Int64 (Fixed)、Int [括號為其alias name 別名]
2. Unsigend Integer: UInt8、UInt16、UInt32、UInt64、UInt
3. 整數類型可以十進位制、二進位制(0b)、八進位制(0o)、十六進位制(0x) 表示。
Int/ UInt 是與 platform 有關的整數類型。在32位元平台,Int/UInt 與 Int32/UInt32寬度相同,而在64位元平台,Int/UInt 與 Int64/UInt64 寬度相同。
4. 整數類型 Value 範圍: 其形態皆有 min 與 max 屬性。例如: UInt8.min 與 UInt8.max 定義 UInt8 的值域 domain 範圍。
浮點類型
與整數相反,是具有小數部分的數字。
Float、Float64、Double
指數表示:
10 進位制: 1.32e-2, 2.72e3
16 進位制: p3 (即 2x2x2 = 8) or P3
為增加可讀性, Integer / Floating point 數值可添加多個 0 或底線,例如:
var rate = 000.002
var saving = 3_668_108
數值轉換 cast
1. 整數與整數之間
2. 浮點數與浮點數之間
3. 整數與浮點數之間
整數/浮點數間數值轉換
1. 初始值為數值時,compiler 自動cast
var var1:Int32 = 100
2. 初值為 variable / constant 時,需 cast
var var2:Int32 = Int32(var1)
注意:轉換時,若大範圍的數值轉換為小範圍的數值時,精確度 precision 會喪失。例如:UInt32 數值轉換為 UInt8 數值。
類型 Alias Name
typealias newClassName = originalClassName
typealias NewType = Int64
var var1:NewType = 100
布爾類型
布爾類型 Boolean 只含邏輯值,即 true (真) / false (假)
let constName:Bool = boolean_value
var variableName:Bool = boolean_value
let num = 100
let result = num == 200 // result is "false"
var isAnimal = true
字元和字串:
Swift 字元皆以 Unicode 編碼。
字元宣告:
var charValue:Character = "A"
注意:字元宣告亦使用雙引號。
字串宣告:
var stringValue1:String = "A"
var StringValue2 = String("A")
var stringValue3 = String() //空字串
var stringValue4 = "" //空字串
let A = "A" // data type : Character
let B = "12" // data type : String
let C = A + B // C = "A12"
特殊字元:
\0: null
\\: slash /u005c
\t: tab /u0009
\n: new line /u000a
\r: return /u000d
\": double quote /u0022
\': single quote /u0027
字串中包含特殊字元:
單字節編碼:\xnn
雙字節編碼:\unnnn (例如:lamda 使用 \u03bb 表示)
四字節編碼:\Uxnnnnnnnn (例如:笑臉 Smile 使用 \U0001f603 表示)
n: 0 - 9, A - F 16 進位
字串包含 Unicode字元:
let percentage = "\x{25}"
let snowflake = "\u{2744}"
let heart = "\U{0001F497}"
\x: before two hexadecimal digits
\u: before four hexadecimal digits
\U: before eight hexadecimal digits
字串比較:
運算元 == , < , >
字串大小寫轉換:
let upperCaseStr = lowerCaseStr.uppercaseString
let lowerCaseStr = upperCaseStr.lowercaseString
前綴與後綴的比較:
前綴:string.hasPrefix("prefixValue")
後綴:string.hasSuffix("suffixValue")
元組類型 Tuples:
Tuples are ordered lists of values. 將多個相互關聯的值合為一個值,方便管理和計算。
宣告:
let person = (18, "John", size:"big") // 或 person = (age:18, name:"John", size:"big")
println(person)
獲取:
println("age:\(person.0), name:\(person.1)")
var (_, name, _) = person
println("name: \(name)")
println("size: \(person.size))
let area = (10, 20) // area = (length, width)
var area = (length:10, width:20)
let (length, width) = area
length // prints 10
Optional 類型
In situations where you can't be sure a variable has a value present, you can use optionals.
Object 的值 value 可為 nil
宣告:
var string1 = "12"
var num:Int? = string1.toInt()
println(num!) // num 一定有 value,否則 error
亦可以下列表示:
var string1 = "12"
var num:Int! = string1.toInt()
println(num)
println(num! + 2) //不可寫成 println(num + 2)
var s:String
s = "ABC"
s! // if you know s has a value, then you could unwrap s using an exclamation point (!)
Word 字組
為Swift 的儲存單位,為 64 bit 字元,即 8 byte 的整數
var 變數名: Word = 初始值
Comment
多行註解: /* ... */
單行註解: //
Swift 允許 nest 巢狀註解:
/* this is
/* a book
*/
*/
Xcode 提供快捷鍵多行comment: 點選多行 code 後,按住 command + / 可多行註解,解除亦以 command + / 命令。
沒有留言:
張貼留言