Swift,蘋果於2014年WWDC(蘋果開發者大會)發布的新開發語言,可與Objective-C*共同運行於Mac OS和iOS平台,用於搭建基於蘋果平台的應用程序。
目前已經更新到Swift2.0,即將發布3.0版本.聽說有很大的變動呢.現在我們先來了解一下Swift與OC基礎的小異同(不過如果要說它與OC有什么不同,感覺很不同啊~~~)
1.輸出日志不同
2.常量變量定義不同,swift 類型的長短比OC更精確,swift是類型安全的語言,swift不允許隱式轉換,但是可以顯示轉換
3.運算符:+ , - , * , / ,%, ++,--,OC和swiftch除了取模運算符,其他用法都一樣,OC取模必須是整數,swift取模可以是小數,swift不可以連續賦值,但是OC可以
4.分支
@1
1)、if后的括號可以省略
2)、if后只能接bool值
3)、if后的大括號不能省略
@2
swift和OC的循環差不多,但是swift,for后括號可以省略
@3
1)while循環:while后的括號可以省略,只能是bool值作為條件語句
2)OC中有do-while,swift中do是用來捕獲異常的,swift里用repeat-while
4.swift里有元組,OC木有
5.swift的nil和OC有些不一樣,OC只有對象可以用nil,swift基礎類型(整形,浮點)沒有值時也是nil,當初始化的時候,swift可以沒有初始值的,產生了可選值Optional。
6.OC/swift的字符分別用''/"",字符串NSString/String @""/"",OC以/0結束字符串,swift不是
1.OC 用NSLog輸出日志
swift 用print輸出日志
swift語句結束不需要加;號
2.OC 定義常量 const int a = 10;
swift 定義常量 let a = 10
OC 定義變量 int a = 10;
swift 定義變量 var a:Int = 10
先確定類型,再賦值
var a:Int
a = 20
print(a)
let a:Float = 10.3 //表示32位浮點型
let b:Double = 10.2 //表示64位浮點型
//swift 類型的長短比OC更精確
let intValue1 :Int
let intValue2 :Int16
let intValue3 :Int32
let intValue4 :Int64
let uintValue :UInt
//swift是類型安全的語言,如果直接賦值錯誤,直接報錯,OC不會
let uintValue:UInt = -10
//swift不允許隱式轉換,但是可以顯示轉換
var a:Int = 10
var b:Float = Float(a)
范圍運算符:
封閉范圍運算符:
包括閉包區間所有值 a...b
半封閉范圍運算符:
包含頭不包含尾 a..<b
應用場景:遍歷數組
for i in arr {
}
for i in 1...5 {
print(i)
}
for i in 1..<5 {
print(i)
}
Bool:
C和OC並沒有真正意義上的bool值
C 0假 非0即真
OC 的BOOL類型 typedef signed char BOOL
swift真正的bool
真是ture 假是false
if true {
print("yes")
} else {
print("no")
}
3.
do {
index--;
}while(index > 0)
//swift中do是用來捕獲異常的
repeat {
index--
print(index)
}while (index > 2)
4.元組:將多個相同或者不同類型的值用一個小括號括起來就是一個元組。元組和結構體很像,實際上元組是復合類型。小括號內可以寫任意類型,如果不定義類型,可以根據數據自動判斷推算出類型
//省略了類型
let person = ("YCG",17,180.00)
//沒有省略類型
let person1:(String,Int,Double) = ("YCG",17,180.00)
//獲取元組中的某一項
print(person.0)
print(person.1)
print(person.2)
//以上元組定義有很大的缺陷,可讀性特別差。
//用其他方式定義元組
//省略類型
let person2 = (name:"YCG",age:17,height:80.00)
//沒有省略類型
let person3:(name:String,age:Int,height:Double) = (name:"YCG",age:17,height:80.00)
//獲取相應的值
print(person2.name)
print(person3.height)
//元組的其他寫法
let (name,age,height) = (name:"YCG",age:17,height:80.00)
print(name)
print(age)
print(height)
5.
定義可選值很容易,只需在類型的后面加一個?就行。例如:var value:Int?
一個Optional值和一個非Optional值的區別,Optional值未經初始化雖然為nil,但普通變量連nil的沒有。
var value:Int?
print(value) //nil
var value:Int
print(value) //直接報錯
提取可選類型的值(強制解析)
Optional值不能被直接使用,因為可選值有兩種狀態,分別是有值和沒值,所以我們需要告訴編譯器是否有值
強制解析可選類型的值,只需在變量后加!就可以。
var value:Float?
var value2:Float = value!
print(value2)
注意:如果value沒有值,會報運行時錯誤。
當我不知道 Optional是否有值,該怎么操作?
如果值不為nil,再執行后面的代碼。
var value:Int? = 10
if let tmpValue = value {//先定義一個中間常量,value即時沒有值,也不會崩潰
print(tmpValue)
}
可選項:??,他可以對nil進行快速判斷,??后面的值是參與計算的
var num:Int?
let result :Int = num ?? 0
print(result)
6.
//字符串的常用方法
//1、初始化空字符串
let emptyString = ""
let emptyString2 = String()
//2、遍歷字符串
let string2 = "你是我們的好朋友!"
for a in string2.characters {
print(a)
}
//3、獲取字符串的長度
let count = string2.characters.count
print(count)
//4、判斷字符串是否為空
let emptyStr = "1"
if emptyStr.isEmpty {
print("yes")
}
//5、字符串的拼接
let str1 = "hello"
let str2 = "world!"
let result = str1 + str2
var str3 = "haha"
str3 = str3 + str2
print(str3)
//6、格式化字符串
let intValue = 10
let str4 = "愛情"
let str5 = "\(intValue)、因為\(str4),不會悲傷"
print(str5)
//取小數后兩位
let pi = 3.1415
let str6 = String(format: "%.2f", pi)
print(str6)
//7、字符串比較
//和C語言strcmp一樣
let str7 = "a"
let str8 = "ab"
if str7 > str8 {
print(">")
} else if str7 < str8 {
print("<")
}
//8、是否有前后綴
let str9 = "www.baidu.com"
if str9.hasPrefix("www") {
print("yes")
} else {
print("no")
}
if str9.hasSuffix("cm") {
print("yes")
} else {
print("no")
}
//9、大小寫
let str10 = str9.uppercaseString
let str11 = str9.lowercaseString
print(str10)
//10、String轉基本數據類型
let str12 = "5.2嗎"
let num = Float(str12)
print(num)
//11、截取字符串
let str13 = "你是我們的好朋友!"
//str13.startIndex 從0開始 Index不是int
let fromStr = str13.startIndex.advancedBy(2)
let toStr = str13.endIndex.advancedBy(-2)
let str14 = str13.substringFromIndex(toStr)
let range:Range <String.Index> = Range(start: fromStr, end: toStr)
let str15 = str13.substringWithRange(range)
print(str15)
let toStr1 = (str13 as NSString).substringToIndex(2);
print(toStr1)
let range1 = NSRange(location: 2, length: 6)
let toStr2 = (str13 as NSString).substringWithRange(range1)
print(toStr2)