亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

swift中AnyObject和Any的介紹與區(qū)別詳解

 更新時(shí)間:2017年12月18日 09:32:34   作者:Inlight  
雖然使用swift開(kāi)發(fā)了一段時(shí)間,但是感覺(jué)對(duì)一些基礎(chǔ)的東西了解不是比較透徹,在查詢(xún)了許多資料以后還是打算自己動(dòng)手記錄一下,下面這篇文章主要給大家介紹了關(guān)于swift中AnyObject和Any的介紹與區(qū)別的相關(guān)資料,需要的朋友可以參考下。

誕生

swift 作為新起步的語(yǔ)言,必然拋不掉一些歷史遺留包袱。用過(guò) Objective-C 的同學(xué)肯定知道有一種叫做 id 的類(lèi)型。他可以表示任意類(lèi)的實(shí)例,編譯器不會(huì)對(duì)其類(lèi)型聲明的變量進(jìn)行檢查。在用 swift 做 app 開(kāi)發(fā)時(shí),為了能適配 Cocoa 架構(gòu),AnyObject 就誕生了。它可以代表任意 class 類(lèi)型(用來(lái)替代OC中的 id)。

區(qū)別

在 Swift 中編譯器會(huì)對(duì) AnyObject 實(shí)例的方法調(diào)用做檢查,還會(huì)返回一個(gè) Optional 的結(jié)果。

原理

public typealias AnyObject
// The protocol to which all class types implicitly conform.

由定義就可以看出它就是一個(gè)接口,所有的 class 都隱式地實(shí)現(xiàn)了這個(gè)借口。所以 AnyObject 只適用于 class 類(lèi)型。但是 swift 中的基本類(lèi)型都是 struct 類(lèi)型,并不能用 AnyObject 來(lái)表示。所以官方又提出了一個(gè)更特殊的 Any 類(lèi)型,它除了 class 以外還可以表示其他類(lèi)型,可以說(shuō)是任意類(lèi)型(包括 struct,enum,func等)。

import UIKit
class ViewController: UIViewController {
 override func viewDidLoad() {
  super.viewDidLoad()  
  let swiftArr = ["a", "b", "c"]
  let swiftStr = "hello world"  
  var array = [AnyObject]()
  array.append(swiftArr)
  array.append(swiftStr)
 }
}

這種寫(xiě)法是會(huì)報(bào)錯(cuò)的,String 不符合預(yù)期類(lèi)型 AnyObject,并且系統(tǒng)提示了我們?cè)趺葱薷模?br />

Argument type 'String' does not conform to expected type 'AnyObject' Insert ' as AnyObject'

按提示修改后:

import UIKit
class ViewController: UIViewController {
 override func viewDidLoad() {
  super.viewDidLoad()  
  let swiftArr = ["a", "b", "c"]
  let swiftStr = "hello world"  
  var array = [AnyObject]()
  array.append(swiftArr as AnyObject)
  array.append(swiftStr as AnyObject)
 }
}

這里我們顯示的將 swift 中的 String 和 Array 轉(zhuǎn)成了 AnyObject。實(shí)際上 array 里面的元素已經(jīng)變成了 NSString 和 NSArray 了。

當(dāng)然我們還有另外的方式解決此問(wèn)題,用 Any。

import UIKit
class ViewController: UIViewController {
 override func viewDidLoad() {
  super.viewDidLoad()  
  let swiftArr = ["a", "b", "c"]
  let swiftStr = "hello world"  
  var array = [Any]()
  array.append(swiftArr)
  array.append(swiftStr)
 }
}

可以看到結(jié)果全部是 swift 中的原生類(lèi)型:

注意

  • 只是用 swift 類(lèi)型而不轉(zhuǎn)為 Cocoa 類(lèi)型是會(huì)提升性能的,所以我們最好還是使用原生類(lèi)型。
  • 在 OC 和 swift 混編的工程中使用 AnyObject 和 Any 是在所難免的,但我們要盡量避免使用這兩者,swift 中最好明確地指出確定的類(lèi)型。
  • 如果我們的代碼經(jīng)常用到這兩者,意味著代碼可能在結(jié)構(gòu)和設(shè)計(jì)上存在問(wèn)題。

下面來(lái)舉例說(shuō)明:

1.Any -- 比如我們經(jīng)常使用的參數(shù)parameters

parameters = ["appId":"123456", "timestamp":203428394820,
"version":"1.0", "appAuthToken":"7D8SF7D8VS8987D67687", 
"bizContent":["pageStart":1, "pageSize": "10","isTrue":true]] as [String : Any]

這里面包括了String,Int,Bool,Dictionnary四種類(lèi)型的參數(shù),最后使用as [String : Any] ,就是說(shuō),parameters的key是String類(lèi)型,但是value值可以是任何類(lèi)型。

2.AnyObject -- 在做網(wǎng)絡(luò)請(qǐng)求的時(shí)候

typealias Complicate = (AnyObject) ->Void
//請(qǐng)求回調(diào)
var complicate : Complicate?
func request(type:RequestType, URLString:String, parameters:[String : AnyObject], complicate:@escaping Complicate) -> Void {
CK().maskShow()
switch type {
case .requestTypeGet:
Alamofire.request(URLString, method: .get, parameters: parameters, encoding: JSONEncoding.default, headers: nil)
.validate()
.responseJSON { response in
CK().dismissMask()
switch response.result{
case .success:
if let value = response.result.value{
//把得到的JSON數(shù)據(jù)轉(zhuǎn)為字典
complicate(value as AnyObject)
}
case .failure: ()
DMCAlertCenter.default().postAlert(withMessage: "網(wǎng)絡(luò)請(qǐng)求失敗")
return
}
}

可以看到,在返回的json進(jìn)行回調(diào)的時(shí)候,由于value是JSON類(lèi)型的實(shí)例,complicate(value as AnyObject), 就是將value作為AnyObject傳值出去。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Swift 4最全的新特性詳細(xì)解析(推薦)

    Swift 4最全的新特性詳細(xì)解析(推薦)

    Swift 4 在 Swift 3 的基礎(chǔ)上,提供了更強(qiáng)大的穩(wěn)健性和穩(wěn)定性。所以下面這篇文章就來(lái)給大家總結(jié)介紹關(guān)于Swift4新特性的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-11-11
  • swiftui開(kāi)發(fā)之padding默認(rèn)值設(shè)置詳解

    swiftui開(kāi)發(fā)之padding默認(rèn)值設(shè)置詳解

    這篇文章主要為大家介紹了swiftui開(kāi)發(fā)之padding默認(rèn)值設(shè)置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Spring中BeanFactory與FactoryBean的區(qū)別解讀

    Spring中BeanFactory與FactoryBean的區(qū)別解讀

    這篇文章主要介紹了Spring中BeanFactory與FactoryBean的區(qū)別解讀,Java的BeanFactory是Spring框架中的一個(gè)接口,它是用來(lái)管理和創(chuàng)建對(duì)象的工廠接口,在Spring中,我們可以定義多個(gè)BeanFactory來(lái)管理不同的組件,需要的朋友可以參考下
    2023-12-12
  • Swift心得筆記之控制流

    Swift心得筆記之控制流

    控制流(Control Flow)我不想這么譯的。。。我更想叫控制語(yǔ)句,但是想想,這么叫也沒(méi)錯(cuò),意指流程控制。大部分用法跟C類(lèi)似。
    2015-04-04
  • iOS Swift UICollectionView橫向分頁(yè)滾動(dòng),cell左右排版問(wèn)題詳解

    iOS Swift UICollectionView橫向分頁(yè)滾動(dòng),cell左右排版問(wèn)題詳解

    UICollectionView是iOS中比較常見(jiàn)的一個(gè)控件,這篇文章主要給大家介紹了關(guān)于iOS Swift UICollectionView橫向分頁(yè)滾動(dòng),cell左右排版問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Swift如何使用類(lèi)型擦除及自定義詳解

    Swift如何使用類(lèi)型擦除及自定義詳解

    有很多地方會(huì)用到類(lèi)型擦除,并且它們的作用的各不相同。下面這篇文章主要給大家介紹了關(guān)于Swift如何使用類(lèi)型擦除及自定義的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-10-10
  • Swift類(lèi)型創(chuàng)建之自定義一個(gè)類(lèi)型詳解

    Swift類(lèi)型創(chuàng)建之自定義一個(gè)類(lèi)型詳解

    這篇文章主要介紹了Swift類(lèi)型創(chuàng)建之自定義一個(gè)類(lèi)型詳解,本文講解了自定義原型、實(shí)現(xiàn)默認(rèn)值、支持基本布爾型初始化、支持Bool類(lèi)型判斷、支持兼容各們各派的類(lèi)型、完善OCBool的布爾基因體系等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • 在Swift中使用KVO的細(xì)節(jié)以及內(nèi)部實(shí)現(xiàn)解析(推薦)

    在Swift中使用KVO的細(xì)節(jié)以及內(nèi)部實(shí)現(xiàn)解析(推薦)

    這篇文章主要介紹了在Swift中使用KVO的細(xì)節(jié)以及內(nèi)部實(shí)現(xiàn)解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Swift項(xiàng)目中利用SWRevealViewController實(shí)現(xiàn)側(cè)滑菜單

    Swift項(xiàng)目中利用SWRevealViewController實(shí)現(xiàn)側(cè)滑菜單

    這篇文章主要介紹了Swift項(xiàng)目中利用SWRevealViewController實(shí)現(xiàn)側(cè)滑菜單,需要的朋友可以參考下
    2015-12-12
  • Swift教程之屬性詳解

    Swift教程之屬性詳解

    這篇文章主要介紹了Swift教程之屬性詳解,屬性是描述特定類(lèi)、結(jié)構(gòu)或者枚舉的值,計(jì)算屬性存在于類(lèi)、結(jié)構(gòu)與枚舉中,存儲(chǔ)屬性?xún)H僅只在類(lèi)與結(jié)構(gòu)中,需要的朋友可以參考下
    2015-01-01

最新評(píng)論