code.club

標題: 一些swift容易搞錯的細節 [打印本頁]

作者: birdy    時間: 2016-5-14 02:12
標題: 一些swift容易搞錯的細節
本帖最後由 birdy 於 2016-5-14 02:13 編輯

元組宣告:

var t1: (x:Int, y:String) = (x:123, y:"hello") --> ok
t1.x -->ok
t1.y -->ok

var t2 = (x:123, y:"hello") -->ok
t2.x -->ok
t2.y -->ok

var t3: (Int, String) = (x:123, y:"hello") -->ok

t3.x -->wrong
t3.y -->wrong





作者: birdy    時間: 2016-5-15 00:55
本帖最後由 birdy 於 2016-5-15 01:40 編輯

swift的類型轉換必須所有運算元都要轉換,不能只換一個。

var x = 5
var y = 2
Float(x) / Float(y) 2.5


swift的求餘數 % 不限於整數而已。

9.9 % 2.5 == 2.4
作者: birdy    時間: 2016-5-16 02:30
var arr = [1,3,5,7,9]
for i in arr {
print(i)
}

這裡的 i 預設是常數,而非變數。除非這樣寫, for var i in arr {....}
作者: birdy    時間: 2016-5-20 14:39
本帖最後由 birdy 於 2016-8-2 16:52 編輯

字串型的陣列,str[]裡面不能放數字,而是要放 index 型別的變數。
而str.endIndex指的位置類似C語言中的'\0',例如 str = "hello",str.endIndex == 5,而str[str.endIndex.predecessor()] 才是最後一個字母 "o"。不能用減的如  str.endIndex - 1 .
作者: swift    時間: 2016-8-2 16:51
var num = 9
var str = "1"

var test = String(num) + str --> "91"

但如果是
var test = num + Int(str)! 一定要有解包 !

因為 str 中未必剛好是數字型的字符,例如 str = "kk" 就無法變成 Int(str) ,故這點就屬於 optional 變數。要先解包確定可以才加。
作者: swift    時間: 2016-8-29 21:47
var dict = ["one":1, "two":2, "three":3, "four":4]
若要對字典中的值進行運算,則要先解包。
例如: dict["one"]! + dict["three"]

而陣列和元組則都不用,直接拿出來就可運算。
例如:
array[2] + array[3]
tuple.0 + tuple.1

不知為何如此?
作者: swift    時間: 2016-8-30 18:25
func 可以加或不加外部名稱,但如果有外部名稱者,在呼叫時就只能用外部名稱,原先沒有外部名稱者,則要用內部名稱。
closure 則不能有外部名稱,而且呼叫時也不能加上內部名稱。

func t1(x:String, y:Int) {}
func t2(theX:String, theY:Int) {}
var closure1 = {(x:String, y:Int) in ...}

t1(x:"hello", y:199)
t2(theX:"hello", theY:199)
colosure1("hello", 199)




歡迎光臨 code.club (http://code.club/) Powered by Discuz! X3.2