code.club

 找回密碼
 立即註冊
搜索
查看: 8660|回復: 6
打印 上一主題 下一主題

一些swift容易搞錯的細節

[複製鏈接]
跳轉到指定樓層
樓主
發表於 2016-5-14 02:12:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最後由 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




回復

使用道具 舉報

沙發
 樓主| 發表於 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
回復 支持 反對

使用道具 舉報

板凳
 樓主| 發表於 2016-5-16 02:30:16 | 只看該作者
var arr = [1,3,5,7,9]
for i in arr {
print(i)
}

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

使用道具 舉報

地板
 樓主| 發表於 2016-5-20 14:39:08 | 只看該作者
本帖最後由 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 .
回復 支持 反對

使用道具 舉報

5#
發表於 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 變數。要先解包確定可以才加。
回復 支持 反對

使用道具 舉報

6#
發表於 2016-8-29 21:47:03 | 只看該作者
var dict = ["one":1, "two":2, "three":3, "four":4]
若要對字典中的值進行運算,則要先解包。
例如: dict["one"]! + dict["three"]

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

不知為何如此?
回復 支持 反對

使用道具 舉報

7#
發表於 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)
回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

小黑屋|手機版|Archiver|code.club  

GMT+8, 2024-11-21 16:41 , Processed in 0.095601 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表