你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> # Swift2.0基本語法 常用數據類型

# Swift2.0基本語法 常用數據類型

編輯:IOS開發綜合

基本語法

名稱 作用 print 控制台輸出語句 var 聲明一個變量 let 聲明一個常量 if…else.. 判斷語句 switch…case.. 分支語句 for 循環語句 while 判斷循環語句,先判斷後循環

print

向控制台輸出文本log

print("hello world")//輸出純字符串
print("1 + \(1) =?")//輸出字符+數字的組合 這裡使用了字符串插值`\()` 括號內可以接受任何內容 輸出結果:1 + 1 =?
var a:floata: = 2.1
print("1 + \(a)")  //輸出字符+變量 輸出結果:1 + 2.1

var

聲明一個變量.變量表示可以修改的數據類型 可以賦值多次

例子:

var a:Int = 0
a = 100 //可以再次賦值
var b:NSObject = NSObject()

let

聲明一個不可變的常量,只能賦值一次

例子

let a:Int = 0
a = 100 //這句代碼會報錯 不可以再次賦值

if…else

條件判斷語句,和OC中得語法主要有三點區別

條件並非必須在小括號中 條件必須是明確的true或者false 0或非0 並不會隱式的轉換為true或false,nil和非nil同樣不會隱式轉換 執行語句必須包含在大括號中

例子:

let a:Int = 0
if a = 0 {
    //條件成立執行
    a = 100
}else{ 
    //條件不成立執行
    a = 50
}

switch

關鍵字:

switch 判斷語句首要關鍵字 case 節點關鍵字,每個判斷的節點使用 fallthrough 不跳出判斷,繼續向下執行 default 例外,沒有條件成立時執行此語句 where 判斷子語句 相當於 if 語句中得 &&

在swift中switch語句默認只匹配一個case這和其它類C語言不通,類C語言中,如果不使用關鍵字break,那麼將執行匹配到的case節點下面所有的代碼,而在swift中,不需要break語句來進行跳出,默認原則就是只執行匹配到的節點與下個節點之間的代碼.並且不需要大括號進行包裹,如果想執行後面的語句可以加上fallthrough語句.

let a = 0;
switch a {
    case 0://遇到節點 匹配相同 條件成立 執行後面的語句
        print("0") //輸出0
        fallthrough //執行下一個節點中得內容
    case 1: //匹配失敗 這個條件並不成立 但是也會執行,因為上一句中得關鍵字fallthrough 所以這個節點中得代碼被執行了
        print("1")//輸出1
    case 2:         //匹配失敗 不執行
        print("2")
    default:        //默認節點 不執行
        print("3")
}
輸出結果
0
1

在swift中switch語句更加的強大,不僅能判斷進行普通的常量匹配還支持范圍匹配,元祖匹配,和where子語句匹配.

1.范圍匹配

let a = 5;
switch a {
    case 0...10://匹配a是否在0 - 10這11個值之內
        print("0")
    case 0..<10://匹配a是否在0 - 9這10個值之內 雖然條件成立但是由於第一個條件已經成立所以這裡不會進入判斷
        print("1")
    default:
        print("2")
}
輸出結果:
0

2.元組匹配

let a = (1,2,"A");
switch a {
    case let b://配皮元祖 絕對匹配的寫法
        print("\(b.0)")//輸出元組的第一個參數 這裡輸出:1
    case (1,2,let c)://匹配第一第二個參數,將第三個參數賦值給c 
        print("\(c)")//這裡輸出:A
    case (_,let c,"A")://第一個參數忽略匹配,第二個參數賦值給c 匹配第三個參數"A"
        print("\(c)") //這裡輸出:2
    default:
        print("2")
}
輸出結果:
1

更多方法可以參考元祖的使用

3.where語句

let a = 1;
switch a {
    case 1 where false://匹配是否為1 並且where後面的bool值為true 這裡條件不成立所以不會運行
        print("1")
    case 1 where a == 1://這裡匹配成功並且 where後面值也為true 所以下面代碼會運行
        print("2")
}
輸出結果:
2

附注:

swift中switch默認只匹配一個case,如果需要匹配多個則需要加上fallthrough關鍵字 swift中switch沒有break,如果在switch中使用break,不是跳出switch而是跳出更外層的范圍.

for

與oc相比不需要對循環條件加括號了,新增區間運算符.....<代替了i = 0 i < 10 i++這種形式

for i in 0..<10{ //0..<10 表示0-9的數字 這是半開區間,還一種全開區間0...10 表示0-10的數字
    print("i = \(i)")
}
效果等同於:
for var i = 0;i < 10; i++{
    print("i= \(i)")
}

同樣for - in形式可以用於數組,和OC相同,由於swift是強類型語言並且支持類型推斷,所以在for- in中可以不去聲明類型

var a:[Int] = [1,2,3,4,5]
for i in a{
    print("i = \(i)")
}
輸出結果:
i = 1
i = 2
i = 3
i = 4
i = 5
是不是比oc簡單的多

while

和oc基本沒有區別,條件無需小括號

var a = 1;
while a < 10{
    a++
    print("a");
}
//這個循環首先會判斷a是否小於10 條件成立才進入循環塊中執行代碼,每執行一次判斷一次,直到條件不成立才會繼續向下運行

var a = 1;
repeat{//swift中 do換成了repeat 作用一樣
    a++
    print("a")
}while a < 10
//這個循環會首先進入代碼塊執行一遍塊中的代碼,然後再進行條件判斷
關鍵字 break這個關鍵字可以強制跳出循環.continue終止當前循環,開始下一次的循環.
var i:Int = 0;
    repeat{
        i += 1
        if i >= 10 {
            break //當條件成立時 跳出當前循環 執行循環後面的代碼
        }
        if i%2 == 0{
            continue //當條件成立時 結束當前循環,進行下一次循環
        }
        print("i = \(i)")
}while true //死循環
print("end")

輸出結果:
i = 1
i = 3
i = 5
i = 7
i = 9
end

基本數據類型

在swift中,基本數據類型也擁有各自的方法.通過方法可以對數據進行更改.比如Int.min 就能得到Int所能儲存的最小值 a.hashValue a是整數 可以得到哈希值 swift是一個強類型語言,任何類型的值都不能隱式的轉換成另外一種類型,需要轉換時可以使用Int(b)講b顯式的轉換成Int類型
名稱 說明 整型 包含Int Int8 Int16 Int32 Int32的有符號整型和UInt8 UInt16 UInt32 UInt64的無符號整型 浮點型 Float和Double,默認為Double類型的 布爾型 true和false 放棄了OC中得YES和NO 不支持隱式轉換,0和非0不在代表false和true 字符串 string 類似腳本語言的string 可以直接鏈接字符串和追加字符 數組 不同於OC數組只能包含OC對象 swift數組可以包含所有對象 字典 同樣可以包含所有對象,key值也可以是任意的基本數據類型

整型

只能儲存整數,默認推斷類型為Int
var a = 10 //a是Int類型的
Int.max //取一個最大得值
Int.min //取一個最小的值

浮點型

默認推斷類型為Double類型,Float32位 Double64位與設備的架構無關
var f:Float = 2.2

布爾型

在swift中,0不代表false 非0也不代表true nil也不會等於false 所以的值都是唯一類型的,無法隱式的轉換.所以說if(1)這樣的寫法也將不可用

字符串

swift中添加了新的字符串類型string 如果使用cocoa庫的話NSString依舊可以使用.string是Character類型值得集合,每個Character代表一個Unicode字符.因為每個字符大小不同,所以無法通過string占用內存大小來獲得字符串的長度.
//創建
var str:String = "asA中??"
//獲取長度
print(str.characters.count);    //輸出結果:5
//字符串拼接
let newStr = str + "123"
print("拼接後的字符:\(newStr)") //輸出結果:asA中?123
//字符串追加
str += "456"
print(str)  //輸出結果:asA中?456
//取首字符
print(str.substringToIndex(str.startIndex.advancedBy(1)))   //輸出結果:a
//取尾字符
print(str.substringFromIndex(str.endIndex.advancedBy(-1)))  //輸出結果:6
//取字符中間
let start = str.startIndex.advancedBy(1)
let end = str.endIndex.advancedBy(-1)
print(str[start...end]) //輸出結果:sA中?456
//取字符在字符串中的位置
let r:Range? = str.rangeOfString("sA")
print(r!)   //輸出結果:1..<3
//刪除字符
str.removeRange(r!)
print(str)  //輸出結果:a中?456
//遍歷字符
for c in str.characters {
    print(String(c))//依次輸出:a, 中, ?, 4, 5, 6
}
//比較字符
let a = "a"
let b = "b"
print(a == b)  //輸出結果:false

在string中,於NSString的使用方法有了很大的不同,語法更加簡潔,更加貼合數值類型的操作習慣,支持范圍區間符號...非常方便的就能獲取范圍,字符串的拼接和追加也不再需要代碼直接使用+號就能完成.同時比較字符串和遍歷字符串使用起來也非常的方便.

數組

首先和oc中不同的是,swift數組可以儲存任何類型,包括基本數據類型如:Int,String等,再者swift數組只能儲存相同的數據類型,這樣可以確保從數組中獲得的數據類型是一致的,從而避免一些錯誤.
//創建
var array1:[String] = ["a","b","1"]
var array2:[String]
var array3:Array = [1,2,3,5]
//查詢下下標
array1.count  //輸出結果為:3
//遍歷
for a in array1 {
    print(a) //依次輸出:a, b, 1
}
//增加
array1.append("c") //array1結果為:["a","b","1","c"]
//刪除
array1.removeAtIndex(1) //array1結果為:["a","1","c"]
//取元素
print(array1[0])    //輸出結果為:a
//取范圍內元素
print(array1[0...2]) //輸出結果為["a","1"]
//替換元素
array1.insert("z", atIndex: 0) //array1結果為:["0","1","c"]
//判斷是否為空
print(array1.isEmpty) //輸出結果為:false

需要注意的是,在數組中如果儲存的值是基本類型,結構體或枚舉則數組將數據copy到數組中,修改外部數據或數組中的數據是不會對另外一方造成影響的

var a = 1,b = 2,c = 3,d = 4
var all:Array = [a,b,c,d]
a = 11
print(all[0])//雖然a的值變成了11 但是對數組中的數據沒有影響 這裡輸出:1

如果是類對象,則是引用到數組中,對任何一方的改變都會影響到另外一方的值.

var a:UIView = UIView()
let all = [a]
print(all[0].tag)//輸出結果:0
a.tag = 1           //修改a.tag的值,數組第一元素的tag值也會跟著改變
print(all[0].tag)//輸出結果:1

字典

在swift中,任何遵循Hashable協議的類型都可以作為字典的key,而所有的基本類型都遵循Hashable,所以它們都可以作為key來使用,而oc中只有NSString類型可以作為key.字典可儲存的類型和Array相同都可以儲存任何形式的值.不同於OC中的字典只能儲存NSObject對象.
//創建
var dic = ["a":1]
var dic1:Dictionary = [:]
var dic2:[String:Int] =  Dictionary()
//獲得元素數量print(dic.count)
//遍歷數組
for (str,number) in dic {
    print(str + " " + String(number))
}
//添加元素
dic["b"] = 2
//刪除元素
dic.removeValueForKey("a")
//更改元素
dic["b"] = 3
//通過key獲取值
print(dic["b"]!)

注意:字典中的value值是可空屬性,所以需要使用 ! 來強制解包,當然為了安全起見每次強制解包之前都需要判斷一下是否為空.

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved