第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

“ as?”,“ as!”和“ as”有什么區(qū)別?

“ as?”,“ as!”和“ as”有什么區(qū)別?

動漫人物 2019-11-28 10:04:24
在升級到Swift 1.2之前,我可以編寫以下行:if let width = imageDetails["width"] as Int?現(xiàn)在它迫使我寫這一行:if let width = imageDetails["width"] as! Int?我的問題是,如果我被迫如上所述編寫代碼,難道我不能只編寫下面的代碼,它會做同樣的事情嗎?在imageDetails的所有值中它都會給我相同的結(jié)果嗎?if let width = imageDetails["width"] as Int
查看完整描述

3 回答

?
慕標(biāo)5832272

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個贊

as關(guān)鍵字用于進(jìn)行上下轉(zhuǎn)換:


// Before Swift 1.2

var aView: UIView = someView()


var object = aView as NSObject // upcast 


var specificView = aView as UITableView // downcast

從派生類到基類的轉(zhuǎn)換可以在編譯時檢查,并且永遠(yuǎn)不會失敗。


但是,向下轉(zhuǎn)換可能會失敗,因?yàn)槟鸁o法始終確定特定的類別。如果您有UIView,則可能是UITableView或UIButton。如果您的垂頭喪氣選擇正確的類型,那就太好了!但是,如果碰巧指定了錯誤的類型,則會出現(xiàn)運(yùn)行時錯誤,并且應(yīng)用程序?qū)⒈罎ⅰ?/p>


在Swift 1.2中,向下轉(zhuǎn)換必須是可選的as?或用as!“強(qiáng)制失敗”。如果您確定類型,則可以用as強(qiáng)制轉(zhuǎn)換!類似于您使用隱式展開的可選內(nèi)容的方式:


// After Swift 1.2

var aView: UIView = someView()


var tableView = aView as! UITableView

感嘆號清楚地表明您知道自己在做什么,并且如果您不小心混淆了各種類型,很可能事情會變得非常糟糕!


一如既往 使用可選綁定是最安全的方法:


// This isn't new to Swift 1.2, but is still the safest way

var aView: UIView = someView()


if let tableView = aView as? UITableView {

  // do something with tableView

}

從以下站點(diǎn)獲得此消息:SOURCE


查看完整回答
反對 回復(fù) 2019-11-28
?
肥皂起泡泡

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個贊

as

在Swift 1.2及更高版本中,as只能用于向上轉(zhuǎn)換(或消除歧義)和模式匹配:



// 'as' for disambiguation

let width = 42 as CGFloat

let block = { x in x+1 } as Double -> Double

let something = 3 as Any?  // optional wrapper can also be added with 'as'



// 'as' for pattern matching

switch item {

case let obj as MyObject:

    // this code will be executed if item is of type MyObject

case let other as SomethingElse:

    // this code will be executed if item is of type SomethingElse

...

}

as?

在有條件的類型轉(zhuǎn)換操作符as?會嘗試進(jìn)行轉(zhuǎn)換,但回報(bào)nil,如果它不能。因此,其結(jié)果是可選的。


let button = someView as? UIButton  // button's type is 'UIButton?'


if let label = (superview as? MyView)?.titleLabel {

    // ...

}

as!

該as!運(yùn)算符用于強(qiáng)制類型轉(zhuǎn)換。


as!僅當(dāng)您確定向下轉(zhuǎn)換將始終成功時,才使用類型轉(zhuǎn)換運(yùn)算符()的強(qiáng)制形式。如果嘗試向下轉(zhuǎn)換為錯誤的類類型,則此形式的運(yùn)算符將觸發(fā)運(yùn)行時錯誤。


// 'as!' for forced conversion.

// NOT RECOMMENDED.

let buttons = subviews as! [UIButton]  // will crash if not all subviews are UIButton

let label = subviews.first as! UILabel


查看完整回答
反對 回復(fù) 2019-11-28
?
暮色呼如

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個贊

可以正確執(zhí)行您想要的操作的正確習(xí)慣(在所有Swift版本中,至少到并包括1.2)是as?可選的強(qiáng)制轉(zhuǎn)換。


if let width = imageDetails["width"] as? Int

可選的強(qiáng)制類型轉(zhuǎn)換返回一個可選的(在這種情況下為Int?),并在運(yùn)行時進(jìn)行測試。您的原始代碼可能將強(qiáng)制轉(zhuǎn)換為可選類型。


查看完整回答
反對 回復(fù) 2019-11-28
  • 3 回答
  • 0 關(guān)注
  • 971 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號