iOS開發(fā)中OC和swift的對比

1.import的類

OC:某個只要要使用某個類就要將該類import。

swift:如果是用戶自己創(chuàng)建類,其他類無需import可以直接使用。pod的一些三方類和系統(tǒng)的一些類,在使用的時候需要import

2.遵守協(xié)議實現(xiàn)協(xié)議中的代理方法

OC:

image

swift:

image

3.函數(shù)的返回值放在了后面

4.函數(shù)的參數(shù)類型放在了參數(shù)名的后面

5.函數(shù)的所有參數(shù)放在了一個"()"里,并且有了一個參數(shù)標(biāo)簽

看swift和OC的對比

image
image

枚舉:

OC中:

typedef NS_ENUM(NSInteger, OrderType) {
OrderTypeHasPay,    // 已經(jīng)支付
OrderTypeNoPay  // 沒有支付
};

  - (void)getOrderType:(OrderType)orderType{
if (orderType == OrderTypeHasPay) {
    NSLog(@"已經(jīng)支付...");
}else if (orderType == OrderTypeNoPay){
    NSLog(@"沒有支付...");
}
}

swift中:

enum OrderType {
case hasPay
case noPay
}

  func getOrderType(orderType:OrderType) -> Void {
    if orderType == OrderType.hasPay {
        print("已經(jīng)支付...")
    }else if orderType == OrderType.noPay{
        print("沒有支付...")
    }
}

6.swift中的閉包和OC中的block
OC中的block:

  void(^)(void)

swift中的閉包:

  ()->()
  @escaping()->()  // 當(dāng)在另一個閉包中使用某個閉包,某個閉包要使用@escaping修飾

6.1解決swift中的閉包引起的循環(huán)引用(使用weak)

  private lazy var titleView:SwiftPageTitleView = { [weak self] in
    let titles = ["推薦", "游戲", "娛樂", "趣玩"]
    let titleY:CGFloat = kStatusBarH + kNavigationBarH
    let titleView = SwiftPageTitleView.init(frame: CGRect(x: 0, y: titleY, width: kScreenWidth, height: titleH), titles: titles)
    titleView.deleate = self
    return titleView
}()

7.swift中的可選類型
8.swift中的基本運算

只有相同數(shù)據(jù)類型的數(shù)據(jù)才能進行運算(Int類型要想和Double類型數(shù)據(jù)運行,需要先將Int類型數(shù)據(jù)強轉(zhuǎn)成Double類型數(shù)據(jù))

9.swift中的guard
增強了可讀性

  guard age>18 else{ return }  // 如果條件不為真就不再往下執(zhí)行
  print("成年了...")

9.1.swift中的if
沒有了OC中的”非0即真"
10.swift中的switch
可以判斷多個條件
可以判斷多種類型
不用寫break了
11.swift中的區(qū)間

  0..<10  // 半開半閉區(qū)間
  0...9  // 閉區(qū)間

12.swift中的元組
取數(shù)據(jù)更加方便
取出之后就知道元素的類型了

  let info = (name:1, age:1, height:3)
  info.name

13.swift中的可選類型
swift是強類型語言。nil在swift中成了一種特殊類型,不能直接賦值給對象。只有可選類型才能賦值為nil

  var name:Optional<String> = nil
  var name:String?  // 簡便寫法

  name = Optional("a")
  name = "a"

  print(name!)  // 可選類型取值  !:強制解包
  // 可選綁定
  if tempName = name{  // 如果有值就進行解包
        print(tempName)
  }

13.swift中的類型轉(zhuǎn)化
as as? as!

  if (name = dict["name"] as? String){
        print(name)
  }
  let name1 = name as! String   // 確定能轉(zhuǎn)化成功之后使用as!

14.swift中的結(jié)構(gòu)體

  stuct Location{
          var x:Double
          var y:Double
          func test(){print("111")}
          mutating func move(distance:Double){
                    self.x += distance
          }
        func init(x:String, y:String){  // 擴充構(gòu)造函數(shù)
              self.x = Double(x) ?? 0  // 能解包就解包,不能解包就使用0
              self.y = Double(y) ?? 0
        }
    }

14.swift中的屬性
存儲屬性、計算屬性、類屬性

 var num1:Int = 1  // 存儲屬性
 var num2:Int = 2
  var num3:Int{  // 計算屬性
        retun num1 + num2
  }
static var name:String = ""  // 類屬性

本篇文章會持續(xù)更新,愿大家加班不多工資多,男同胞都有女朋友,女同胞都有男朋友。??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容