2015年1月5日 星期一

【Swift 筆記 Draft】第 1 講: 語言基礎


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 _ , 字母或是數字

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 變量、變數:

var varName = initValue
var varName:dataType

變數 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 被宣告在同一行,則以逗號 (,) 區隔 String 的 cat 操作 1. String1 + String2 + ... 2. String1 + toString(variable/constant/...) 3. "String \(variable/constant)" Data Type 數據類型 1. 整數類型 Integer 2. 浮點類型 Floating Point 3. 布爾類型 Boolean 4. 字串類型 String 5. 特殊類型 (位元組 Byte、可選類型) Data Type 都是以大寫字母開頭 Variable / Constant 在 initialize 初始值設定時,要注意 data type 的值域範圍。 整數類型: 1. Signed Integer: Int8 (Byte / SingedByte)、Int16 (ShortFixed)、Int32 (Int)、Int64 (Fixed) [括號為其alias name 別名] 2. Unsigend Integer: UInt8、UInt16、UInt32、UInt64 3. 整數類型可以十進位制、二進位制(0b)、八進位制(0o)、十六進位制(0x) 表示。 Int/ UInt 是與 platform 有關的整數類型。在32位元平台,Int/UInt 與 Int32/UInt32寬度相同,而在64位元平台,Int/UInt 與 Int64/UInt64 寬度相同。 浮點類型

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 布爾類型 Bool (true / false) 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 (!) Comment: 多行註解: /* ... */ 單行註解: // Swift 允許 nest 巢狀註解: /* this is /* a book */ */

Xcode 提供快捷鍵多行comment: 點選多行 code 後,按住 command + / 可多行註解,解除亦以 command + / 命令。

沒有留言:

張貼留言

prettyPrint();