[ SWIFT ] - 史丹福 StandFord-CS193P-課程4-心得分享-20150726

[ SWIFT ] - 史丹福 StandFord-CS193P-課程4-心得分享-20150726

課程4的內容主要在介紹主要且常用的 func 與 object,完全沒有程式的撰寫

(1)Array
//宣告
var name[string]:["paul","may","lee"]

// 判斷該陣列是否有值,回傳 true 或 false
name.isEmpty

// 增加元素
name.append("coco")
name += ["coco"]

// 取值 
name[0]
name[0...2]

// 刪除值 - 將 paul 移除,may 會自動補上
name.removeAtIndex(0)

// 兩個陣列合併 (必須相同類別 e.g. String)
name + sex

// 查詢目前陣列中元素數量

name.count

//將元素加入陣列中最後面
name.append("nico")

// 查詢第一個元素
name.first

//查詢最後一個元素
name.last

//插入一個元素
name.insert("diro", atIndex:3)

//加入陣列元素
name.splice(["tina"],atindex:0)

//移除陣列元素
name.removeAtIndex(2)

//移除陣列中特定範圍元素
name.removeRange(2...3)
※如果範圍超過陣列長度不會被執行

//替換陣列中特定範圍元素
name.replaceRange(2...3,with:["99","88"])

sort:排序

sorted:將已排序後的回傳

filter:檢查陣列中元素是否符合條件
map:可以利用map進行型態的轉換!
reduce:將陣列中元素合併後回傳

有關filter、map與reduce參考資料來源:http://www.cocoachina.com/swift/20150619/12173.html



assert:當系統異常時,回傳指定訊息!讓開發人員可以了解異常原因
其他常用function


(2)struct
當宣告struct時,如果沒有宣告init(),則可以透過baby(name:"abcd",weight:"0")讓swift 進行初始化,但是如果有宣告init()後,則無法在由swift進行初始化!

struct也支援Range用法:
Ex:
      Range (start:2,end:6)  

(3)String
前言:String 型別可直接與 NSString 類別串接在一起
所有的String 型別都與UNICODE(萬國碼)相容

在String 中常見的使用特殊字元:
"\0"         // 空字元
"\\"         // 反斜線
"\t"         // 製表符(tab)
"\n"        // 換行符號
"\r"         // 歸位符號(Carriage return)
"\""        // 雙引號
"\'"                        // 單引號
"\u{24}"               // 單位元組的萬國碼
"\u{2665}"          // 雙位元組的萬國碼
"\u{0001F49c}" // 四位元組的萬國碼

範例:var str = "Hello, playground"

advance:移動索引位置或擷取字串
str.isEmpty:檢查字串是否為空值

※String 型別並沒有 length 或 count member 這類屬性,須使用 count(),Ex: count(str)

splice
※此處的index指的是string.index
startIndex:第一個string index 的位置
endIndex:最後string index 的位置

 startIndex 的進階使用:predecessor() 方法來存取索引的前一個字元
                                                 successor() 存取索引的後一個字元
例如:
str[str .startIndex.predecessor()]
str[str.startIndex.successor()]

rangeOfString
replaceRange
description

//檢查特定字首或字尾
hasPrefix:檢查特定字首
hasSuffix:檢查特定字尾

toInt:將Strign 轉換為Int

//大小寫轉換
str.lowercaseString:大寫
str.uppercaseString:小寫
capitalizedString:字首大寫
//為陣列中字串加上特定文字
var name:Array
name = ["paul","may","lee"]
str.join("!",[paul])
結果:回傳!paul

componentsSeparatedByString:字串分割符號
正確來說,分割後應該以array方式承接,讓[0]=Hello,[1]=layground

參考資料來源:
http://tsunghao.github.io/post/2015/03/learn-swift-3.strings-and-characters/

RangeOfString:回傳查詢的文字後位置,下例為查詢.後的位置,所以會回傳4
let num = "56.25"
if let decimalRange = num.rangeOfString("."){
  let wholeNumberPart = num[num.stsrtIndex..]
}

指定移除範圍:
s.removeRange([s.startIndex..])

指定替換範圍:
replaceRange(Range, String)

(4)assert
用於提供程式過程中異常或是需要呈現訊息時使用!當條件符合時就會執行,讓程式開放人員可以方便了解編譯過程!
var a=1,b=2

assert(a

(5)lazy
在使用的時候才會真的配置到記憶體!
通常 lazy 的使用時機在於,有個值需要被複雜或大量計算時,或是初始化時可能需要大量計算時。

(6)Property observers:屬性監視器
屬性檢視器監控和回應屬性值的變化,每次屬性被設置值的時候都會呼叫屬性監視器,甚至新的值和現在的值相同的時候也不例外。
class Observer {
    var total: Int = 0 {
        willSet{
            println("增加前:\(total)")
        }
        didSet{
          println("增加後:\(total)")
        }
    }
}
willSet會在設置新的值之前被呼叫,didSet在新的值被設置之後立即呼叫,willSet監視器會將新的屬性值作為固定參數傳入,在willSet的實作程式碼中可以為這個參數指定一個名稱。

(7)Initialization 初始化

(7.1)Free init
一個基類(沒有父類)里的所有Property都有賦值,那你就可以使用一個默認沒有參數的 init 方法一個結構體當且僅當沒有初始化函數時,它可以得到一個將所有Property作為參數的初始化方法
What can you do inside an init?
給變量賦值
給常量賦值
調用其他init方法 self.init()
調用 super.init()

What are you required to do inside init?
所有Property必需賦值
Swfit的類中里提供兩種類型的來初始化

(7.2)Convenience Init
只能調用本類designated initializer
它能通過調用其他的convenience initializer來間接調用designated initializer
必需先直接或者間接調用designated initializer,才能訪問其他的值
其他初始化函數的調用,無論是convenience initializer調用designator initializer,還是designator initializer調用父類的designator initializer
所有這些都必需在你開始訪問property和方法之前完成

(7.3)Designated Init
只能調用父類designated initializer
必需執行父類的初始化函數,才能給父類的Property賦值
繼承初始化(Inheriting init)
如果你沒有在你的類中實現任何designated initializers,那麼你將繼承父類中的所有designated initializers,否則你將不能繼承父類的任何一個designated initializers
(要麼就全部繼承,要麼就一個都不要)
如果你重寫了父類的所有designated initializers,那你就繼承了父類的所有convenient initializers
如果你一個初始化函數都沒寫,那將繼承父類中全部初始化函數

(7.4)Required init
在初始化函數前面加上required,它的子類必需實現這個方法

(7.5)Failable init
有些初始化函數允許失敗並且返回nil
init?(arg1: Type1, ...) { //might return nil here }
例如:
let image = UIImage(named: "foo") // image is an Optional UIImage
所以我們經常使用 if let

if let image = UIImage(named: "foo") { } else { }

留言

熱門文章