birdy 發表於 2016-5-14 02:12:01

一些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:20

本帖最後由 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:16

var arr =
for i in arr {
print(i)
}

這裡的 i 預設是常數,而非變數。除非這樣寫, for var i in arr {....}

birdy 發表於 2016-5-20 14:39:08

本帖最後由 birdy 於 2016-8-2 16:52 編輯

字串型的陣列,str[]裡面不能放數字,而是要放 index 型別的變數。
而str.endIndex指的位置類似C語言中的'\0',例如 str = "hello",str.endIndex == 5,而str 才是最後一個字母 "o"。不能用減的如str.endIndex - 1 .

swift 發表於 2016-8-2 16:51:39

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:03

var dict = ["one":1, "two":2, "three":3, "four":4]
若要對字典中的值進行運算,則要先解包。
例如: dict["one"]! + dict["three"]

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

不知為何如此?

swift 發表於 2016-8-30 18:25:05

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)
頁: [1]
查看完整版本: 一些swift容易搞錯的細節