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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在斯威夫特語(yǔ)中,感嘆號(hào)是什么意思?

在斯威夫特語(yǔ)中,感嘆號(hào)是什么意思?

慕絲7291255 2019-06-23 15:26:44
在斯威夫特語(yǔ)中,感嘆號(hào)是什么意思?SWIFT編程語(yǔ)言指南有以下示例:class Person {     let name: String     init(name: String) { self.name = name }     var apartment: Apartment?     deinit { println("\(name) is being deinitialized") } } class Apartment {     let number: Int     init(number: Int) { self.number = number }     var tenant: Person?     deinit { println("Apartment #\(number) is being deinitialized") } } var john: Person? var number73: Apartment? john = Person(name: "John Appleseed") number73 = Apartment(number: 73) //From Apple's “The Swift Programming Language” guide  (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html)然后,當(dāng)將公寓分配給該人時(shí),他們使用一個(gè)感嘆號(hào)來(lái)“打開(kāi)實(shí)例”:john!.apartment = number73“打開(kāi)實(shí)例”意味著什么?為什么有這個(gè)必要?這與只做以下工作有什么不同:john.apartment = number73我對(duì)斯威夫特語(yǔ)很陌生。只是想把基本的東西弄下來(lái)。最新情況:我漏掉的謎題(在答案中沒(méi)有直接說(shuō)明-至少在寫這篇文章的時(shí)候沒(méi)有)-就是當(dāng)你做以下事情時(shí):var john: Person?這并不意味著“john是類型的Person“可能是零”,正如我最初所想的,我只是誤解了這一點(diǎn)。Person和Person?是完全不同的類型。一旦我抓住了這個(gè),所有的人?, !瘋狂,以及下面這些偉大的答案,更有意義。
查看完整描述

3 回答

?
慕桂英3389331

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

“打開(kāi)實(shí)例”意味著什么?為什么有這個(gè)必要?

就我所能做的(這對(duì)我來(lái)說(shuō)也是很新的).

“包裝”一詞意味著我們應(yīng)該把一個(gè)可選的變量當(dāng)作禮物,包在閃亮的紙里,這可能(可悲的!)空空如也.

當(dāng)“包裝”時(shí),可選變量的值是帶有兩個(gè)可能值的枚舉(有點(diǎn)像布爾值)。此枚舉描述變量是否持有值(Some(T)),或不(None).

如果存在值,則可以通過(guò)“解包裝”變量(獲取T從…Some(T)).

你還好嗎john!.apartment = number73不同于john.apartment = number73?(釋義)

如果您寫入可選變量的名稱(如文本)john,沒(méi)有!),這指的是“包裝”枚舉(/None),而不是值本身(T)。所以john不是Person,而且它沒(méi)有一個(gè)apartment成員:

john.apartment
// 'Person?' does not have a member named 'apartment'

實(shí)際Person可以各種方式展開(kāi)值:

  • “強(qiáng)制拆開(kāi)”:

    john!

    (給出

    Person

    如果存在,則為值,如果為零,則為運(yùn)行時(shí)錯(cuò)誤)
  • “任擇約束力”:

    if let p = john { println(p) }

    (執(zhí)行

    println

    (如果存在該值)
  • “可選鏈接”:

    john?.learnAboutSwift()

    (如果值存在,則執(zhí)行此組合方法)

我猜您選擇了其中一種方式來(lái)展開(kāi)包裝,這取決于在零情況下應(yīng)該發(fā)生什么,以及這種情況發(fā)生的可能性有多大。這種語(yǔ)言設(shè)計(jì)強(qiáng)制顯式地處理零情況,我認(rèn)為這比Obj-C(這里很容易忘記處理零情況)提高了安全性。

更新:

感嘆號(hào)也用于聲明“隱式解包裝選項(xiàng)”的語(yǔ)法中。

在到目前為止的示例中,john變量已聲明為var john:Person?,這是可選的。如果您想要該變量的實(shí)際值,則必須使用上述三種方法之一展開(kāi)它。

如果它被宣布為var john:Person!相反,變量將是一個(gè)隱式未包裝的可選項(xiàng)(請(qǐng)參閱Apple書(shū)中帶有此標(biāo)題的部分)。在訪問(wèn)值時(shí)不需要打開(kāi)此類變量,并且john可以在不使用其他語(yǔ)法的情況下使用。但蘋果的書(shū)上說(shuō):

當(dāng)變量可能在以后變?yōu)榱銜r(shí),不應(yīng)使用隱式展開(kāi)選項(xiàng)。如果需要在變量的生存期內(nèi)檢查零值,請(qǐng)始終使用普通可選類型。

更新2:

文章“有趣的斯威夫特特征“MikeAsh給出了一些選擇類型的動(dòng)機(jī),我認(rèn)為這是偉大的,清晰的寫作?!?/trans>

更新3:

另一篇關(guān)于隱式解包可選使用感嘆號(hào):“斯威夫特與最后一英里這篇文章解釋說(shuō),這是蘋果公司的一項(xiàng)實(shí)用措施,用于聲明它們的目標(biāo)-C框架所使用的類型,其中可能包含零。聲明類型為可選類型(使用?)或隱式展開(kāi)(使用!)是“安全和方便之間的權(quán)衡”。在本文中給出的示例中,Apple選擇將這些類型聲明為隱式解包裝,從而使調(diào)用代碼更方便,但安全性更低。

也許蘋果將來(lái)可能會(huì)梳理它們的框架,根據(jù)目標(biāo)C代碼的準(zhǔn)確行為,消除隱式展開(kāi)(“可能永遠(yuǎn)不會(huì)為零”)參數(shù)的不確定性,并將其替換為可選(“當(dāng)然可以是零,特別是[希望,文檔!]環(huán)境”)或標(biāo)準(zhǔn)的非可選聲明(“從不為零”)。


查看完整回答
反對(duì) 回復(fù) 2019-06-23
?
繁華開(kāi)滿天機(jī)

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

我認(rèn)為不同之處在于:

var john: Person?

意味著約翰可以是零

john?.apartment = number73

編譯器將這一行解釋為:

if john != nil {
    john.apartment = number73
}

當(dāng)

john!.apartment = number73

編譯器將這一行簡(jiǎn)單地解釋為:

john.apartment = number73

因此,使用!將打開(kāi)if語(yǔ)句,使其運(yùn)行得更快,但如果John為0,則會(huì)發(fā)生運(yùn)行時(shí)錯(cuò)誤。

所以這里的包裝并不意味著它是內(nèi)存包裝的,但它意味著它是被代碼包裝的,在本例中它是用if語(yǔ)句包裝的,而且由于Apple非常關(guān)注運(yùn)行時(shí)的性能,所以他們希望給您一種方法,使您的應(yīng)用程序能夠以最好的性能運(yùn)行。

最新情況:

四年后回到這個(gè)答案,因?yàn)槲以赟tackoverlow中獲得了最高的聲譽(yù):)當(dāng)時(shí)我有點(diǎn)誤解了展開(kāi)的意義。現(xiàn)在,4年后,我相信在這里展開(kāi)的意義是擴(kuò)展代碼,從它原來(lái)的緊湊形式。同時(shí),它也意味著消除對(duì)象周圍的模糊性,因?yàn)槲覀儾荒艽_定它的定義是否為零。就像上面艾希禮的回答一樣,把它當(dāng)作一件禮物,里面什么也不包含。但我仍然認(rèn)為展開(kāi)是代碼展開(kāi),而不是使用枚舉時(shí)基于內(nèi)存的展開(kāi)。


查看完整回答
反對(duì) 回復(fù) 2019-06-23
  • 3 回答
  • 0 關(guān)注
  • 687 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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