簡單談談OC與Swift的異同


Swift,蘋果於2014年WWDC(蘋果開發者大會)發布的新開發語言,可與Objective-C*共同運行於Mac OSiOS平台,用於搭建基於蘋果平台的應用程序。

目前已經更新到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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM