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

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

為什么要創(chuàng)建“隱式解包選項(xiàng)”,因?yàn)檫@意味著您知道有一個值?

為什么要創(chuàng)建“隱式解包選項(xiàng)”,因?yàn)檫@意味著您知道有一個值?

為什么要創(chuàng)建“隱式解包選項(xiàng)”,因?yàn)檫@意味著您知道有一個值?為什么要創(chuàng)建一個“隱式非包裝可選”而不是只創(chuàng)建一個常規(guī)變量或常量?如果您知道可以成功地打開它,那么為什么首先創(chuàng)建一個可選項(xiàng)呢?例如,為什么:let someString: String! = "this is the string"比:let someString: String = "this is the string"如果“選項(xiàng)表示一個常量或變量被允許具有‘無值’,但”有時從程序的結(jié)構(gòu)中可以清楚地看到,在第一次設(shè)置該值之后,可選項(xiàng)總是有一個值“,那么從一開始將其作為可選值有什么意義呢?如果你知道一個可選的東西總是有一個值,那不是說它不是可選的嗎?
查看完整描述

3 回答

?
慕田峪9158850

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

考慮一個對象的情況,它在構(gòu)造和配置對象時可能具有零屬性,但在構(gòu)造和配置過程中是不可變的和非零的(NSImage通常是這樣處理的,盡管在它的情況下,有時變異仍然是有用的)。隱式拆解選項(xiàng)將很好地清理其代碼,安全損失相對較低(只要有一個保證,它就安全了)。

(編輯)但要清楚:常規(guī)的選項(xiàng)幾乎總是更好。


查看完整回答
反對 回復(fù) 2019-06-28
?
MM們

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

在我描述隱式展開選項(xiàng)的用例之前,您應(yīng)該已經(jīng)了解了SWIFT中的選項(xiàng)和隱式未包裝選項(xiàng)。如果你沒有,我建議你先讀我關(guān)于選拔賽的文章

何時使用隱式未包裝的可選項(xiàng)

有兩個主要原因,一個是創(chuàng)建隱式解包裝的可選項(xiàng)。所有這些都與定義一個在nil否則,SWIFT編譯器將總是強(qiáng)制您顯式地打開一個可選的包。

1.在初始化過程中不能定義的常量

每個成員常量必須在初始化完成之前具有一個值。有時,在初始化期間不能用其正確的值初始化一個常量,但仍然可以保證它在被訪問之前具有一個值。

使用可選變量可以避免此問題,因?yàn)榭蛇x變量將自動初始化為nil它最終包含的值仍然是不變的。但是,不斷地展開變量可能會帶來痛苦,因?yàn)槟肋@個變量肯定不是零。隱式解包選項(xiàng)實(shí)現(xiàn)了與可選項(xiàng)相同的好處,增加的好處是不必在任何地方顯式地展開它。

這方面的一個很好的例子是,在加載視圖之前,無法在UIView子類中初始化成員變量:

class MyView: UIView {
    @IBOutlet var button: UIButton!
    var buttonOriginalWidth: CGFloat!

    override func awakeFromNib() {
        self.buttonOriginalWidth = self.button.frame.size.width    }}

在這里,在視圖加載之前不能計(jì)算按鈕的原始寬度,但您知道awakeFromNib將在視圖上的任何其他方法(初始化除外)之前調(diào)用。與其強(qiáng)制在類中無意義地顯式地展開值,還可以將其聲明為隱式未包裝的可選項(xiàng)。

2.當(dāng)應(yīng)用程序無法從變量中恢復(fù)時nil

這應(yīng)該是非常罕見的,但是如果您的應(yīng)用程序不能繼續(xù)運(yùn)行,如果變量是nil當(dāng)被訪問時,費(fèi)時費(fèi)力地對其進(jìn)行測試是一種浪費(fèi)時間。nil..通常,如果您的應(yīng)用程序要繼續(xù)運(yùn)行,必須有一個絕對正確的條件,則可以使用assert..隱式未包裝的可選項(xiàng)中包含了一個Assertfornil。即使如此,如果選項(xiàng)為0,那么打開可選的包并使用更具描述性的斷言通常是好的。

當(dāng)不使用隱式未包裝的可選項(xiàng)時

1.計(jì)算遲緩的成員變量

有時,您的成員變量不應(yīng)為零,但在初始化期間不能將其設(shè)置為正確的值。一種解決方案是使用隱式未包裝的可選項(xiàng),但更好的方法是使用惰性變量:

class FileSystemItem {}class Directory : FileSystemItem {
    lazy var contents : [FileSystemItem] = {
        var loadedContents = [FileSystemItem]()
        // load contents and append to loadedContents        return loadedContents    }()}

現(xiàn)在,成員變量contents在第一次訪問時才初始化。這使類在計(jì)算初始值之前有機(jī)會進(jìn)入正確的狀態(tài)。

注:這似乎與上面的第一條相矛盾。然而,有一個重要的區(qū)別有待作出。這個buttonOriginalWidth必須在viewDidLoad期間設(shè)置上面的內(nèi)容,以防止任何人在訪問屬性之前更改按鈕寬度。

2.其他地方

在大多數(shù)情況下,應(yīng)該避免隱式未包裝選項(xiàng),因?yàn)槿绻褂缅e誤,則整個應(yīng)用程序在訪問時會崩潰。nil..如果您不確定變量是否可以為零,請始終默認(rèn)使用普通可選項(xiàng)。展開一個變量,這個變量永遠(yuǎn)不會nil當(dāng)然不會很疼。


查看完整回答
反對 回復(fù) 2019-06-28
  • 3 回答
  • 0 關(guān)注
  • 885 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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