日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Optional变量初学者指南

發(fā)布時間:2025/5/22 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Optional变量初学者指南 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

蘋果三周前發(fā)布了Swift。 從那時起,我一直在閱讀Swift的官方指南,并在Xcode 6測試版中使用。 我開始喜歡Swift的簡單和語法。 與我的團隊一起,我仍然在研究新的語言,并看看它與Objective-C(一種30歲的編程語言)相比如何。 同時,我們正在努力工作,看看我們?nèi)绾谓坛鯇W(xué)者,幫助社區(qū)輕松應(yīng)對Swift。

兩周前,我們介紹了Swift的基礎(chǔ)知識。 在接下來的幾周內(nèi),我們將編寫一系列教程,以涵蓋Swift中的許多新功能。 本周,我們先來看看Optional變量。

Optionals 概覽

我在上一篇文章中提到了可選項,但沒有詳細介紹。 那么什么是可選項? 在Swift中聲明變量時,默認情況下它們被指定為非可選項。 換句話說,您必須為變量分配非空值。 如果您嘗試將一個零值設(shè)置為非可選項,編譯器會說:“你不能設(shè)置一個空值!”。

var message: String = "Swift is awesome!" // OK message = nil // compile-time error

當然,錯誤消息不是那么用戶友好,但它類似“__conversion’ that accepts the supplied arguments“。 同樣適用于在類中聲明屬性時。 默認情況下,屬性被指定為非可選屬性。

class Messenger {var message1: String = "Swift is awesome!" // OKvar message2: String // compile-time error }

您將收到message2的編譯時錯誤,因為它沒有分配初始值。 對于來自O(shè)bjective-C的用戶,可能會有點驚訝。 在Objective-C中,在將nil分配給變量或聲明沒有初始值的屬性時,不會得到任何編譯時錯誤:

NSString *message = @"Objective-C will never die!"; message = nil;class Messenger {NSString *message1 = @"Objective will never die!";NSString *message2; }

但是,這并不意味著您無法在Swift中分配初始值時聲明屬性。 Swift引入了可選類型來表示沒有值。 它是通過添加問號來定義的? 運算符類型聲明后。 這是一個例子:

class Messenger {var message1: String = "Swift is awesome!" // OKvar message2: String? // OK }

當變量被定義為可選時,仍然可以賦值。 但是,如果變量象上面的代碼一樣沒有分配任何值,其值將自動默認為nil。

為什么要用 Optionals?

?Swift是為安全而設(shè)計的。 正如蘋果所說,可選項是Swift是一種類型的安全語言的例子。 從上面的例子可以看出,Swift的可選項提供編譯時檢查,可以防止在運行時發(fā)生一些常見的編程錯誤。 我們來看下面的例子,你將更好地了解可選項的功能。

在Objective-C中考慮以下方法:

- (NSString *)findStockCode:(NSString *)company {if ([company isEqualToString:@"Apple"]) {return @"AAPL";} else if ([company isEqualToString:@"Google"]) {return @"GOOG";}return nil; }

您可以使用findStockCode:方法獲取特定上市公司的股票代碼。 為了演示目的,該方法只返回您的Apple和Google的股票代碼。 對于其他輸入,它返回空值。

假設(shè)該方法在同一個類中定義,我們使用它:

NSString *stockCode = [self findStockCode:@"Facebook"]; // nil is returned NSString *text = @"Stock Code - "; NSString *message = [text stringByAppendingString:stockCode]; // runtime error NSLog(@"%@", message);

該代碼可以正確編譯,但是當該方法對Facebook返回nil時,運行該應(yīng)用程序會拋出運行時異常。

使用Swift的可選項,它會在編譯時顯示錯誤,而不是在運行時發(fā)現(xiàn)錯誤。 如果我們在Swift中重寫上述示例,它將如下所示:

func findStockCode(company: String) -> String? {if (company == "Apple") {return "AAPL"} else if (company == "Google") {return "GOOG"}return nil }var stockCode:String? = findStockCode("Facebook") let text = "Stock Code - " let message = text + stockCode // compile-time error println(message)

stockCode被定義為可選項。 這意味著它可以包含字符串或空值。 您無法執(zhí)行上述代碼,因為編譯器檢測到潛在錯誤(“可選類型String的值未展開”),并通知您進行更正。

從示例中可以看出,Swift的可選功能加強了空值檢查,為開發(fā)人員提供了編譯時的指引。 顯然,使用可選項有助于更好的代碼質(zhì)量。

可選變量解包

那么我們該如何使代碼工作? 顯然,我們需要測試stockCode是否包含一個空值。 我們修改如下:

var stockCode:String? = findStockCode("Facebook") let text = "Stock Code - " if stockCode {let message = text + stockCode!println(message) }

就像Objective-C對應(yīng)的,我們使用if來查看可選項是否包含一個值。 一旦我們知道可選項必須包含一個值,我們通過在可選名稱的末尾放置一個感嘆號(!)來解開它。 在Swift,這被稱為強制展開。 你用! 操作符打開可選項并顯示底層值。

參考上面的例子,我們只在nil-check之后解開“stockCode”可選項。 我們知道可選量必須包含非零值,然后才能使用! 操作符。 始終建議確保可選項在解開之前包含一個值。

但是如果我們忘記下面的驗證怎么辦?

var stockCode:String? = findStockCode("Facebook") let text = "Stock Code - " let message = text + stockCode! // runtime error

將不會有編譯時錯誤。 編譯器假定可選的包含一個值,因為使用了強制展開。 運行應(yīng)用程序時,將拋出運行時錯誤,并顯示以下消息:

fatal error: Can’t unwrap Optional.None
可選綁定

除了強制解包之外,可選綁定是一種更簡單和推薦的方式來打開可選的。 您使用可選綁定來檢查可選項是否包含值。 如果它包含一個值,將其解開并將其放入臨時常量或變量中。

沒有比使用示例更好的解釋可選綁定的方式。 我們將上一個示例中的示例代碼轉(zhuǎn)換為可選綁定:

var stockCode:String? = findStockCode("Facebook") let text = "Stock Code - " if let tempStockCode = stockCode {let message = text + tempStockCodeprintln(message) }

“if let”(或“if var”)是可選綁定的兩個關(guān)鍵字。 通俗地,代碼說“如果stockCode包含一個值,將其解開,將其值設(shè)置為tempStockCode并執(zhí)行條件塊。 否則,只是跳過塊“。 由于tempStockCode是一個新的常量,您不再需要使用! 后綴訪問其值。

您可以通過評估if語句中的函數(shù)來進一步簡化代碼:

let text = "Stock Code - " if var stockCode = findStockCode("Apple") {let message = text + stockCodeprintln(message) }

這里的stockCode不是可選的,沒有必要使用! 后綴訪問條件塊中的值。 如果從函數(shù)返回nil值,則不會執(zhí)行該塊。

可選鏈

在解釋可選鏈接之前,讓我們稍微調(diào)整一下原來的例子。 我們創(chuàng)建一個名為Stock的新類,其代碼和價格屬性是可選的。 findStockCode函數(shù)被修改為返回Stock類而不是String。

class Stock {var code: String? var price: Double? }func findStockCode(company: String) -> Stock? {if (company == "Apple") {let aapl: Stock = Stock()aapl.code = "AAPL"aapl.price = 90.32return aapl} else if (company == "Google") {let goog: Stock = Stock()goog.code = "GOOG"goog.price = 556.36return goog}return nil }

我們重寫原始示例如下。 我們首先通過調(diào)用findStockCode函數(shù)找到股票代碼/符號。 然后我們計算購買100股股票所需的總成本。

if let stock = findStockCode("Apple") {if let sharePrice = stock.price {let totalCost = sharePrice * 100println(totalCost)} }

由于findStockCode()的返回值是可選的,我們使用可選綁定來檢查它是否包含實際值。 顯然,股票類的價格屬性是可選的。 我們再次使用“if let”語句來測試stock.price是否包含非零值。

上述代碼沒有任何錯誤。 您可以使用可選鏈接來簡化代碼,而不是編寫嵌套的“if set”。 該功能允許我們連接多個可選項與“?”操作符。 這是代碼的簡化版本:

if let sharePrice = findStockCode("Apple")?.price {let totalCost = sharePrice * 100println(totalCost) }

可選鏈接提供了訪問價格價值的另一種方法。 該代碼現(xiàn)在看起來更清潔和更簡單。 這里我只是介紹可選鏈接的基礎(chǔ)知識。 您可以在Apple Swift指南中找到有關(guān)可選鏈接的更多信息。

Swift和Objective-C互操作性

Swift的可選功能非常強大,盡管可能需要一些時間來習(xí)慣語法。 可選項可以幫助您清楚代碼可以使用的值,并避免錯過無效。

Swift旨在與Objective-C API進行交互。 每當您需要與UIKit或其他框架API進行交互時,您一定會遇到可選項。 以下是實現(xiàn)表視圖時遇到的一些可選項:

func numberOfSectionsInTableView(tableView: UITableView?) -> Int {// Return the number of sections.return 1}func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int {// Return the number of rows in the section.return recipes.count}func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCellcell.textLabel.text = recipes[indexPath.row]return cell}

概要

了解可選項如何工作至關(guān)重要,這就是為什么我們將完整的文章用于可選項。 Swift中的可選項允許開發(fā)人員在編譯時發(fā)現(xiàn)潛在的問題,從而在運行時防止意外的錯誤。 一旦你習(xí)慣了語法,你會欣賞可選的美麗。

和往常一樣,我們很樂意聽到您的反饋。 如果您對可選項有任何疑問或想分享您的想法,請隨時給我們留言。

轉(zhuǎn)載于:https://www.cnblogs.com/luoxs/p/6678828.html

總結(jié)

以上是生活随笔為你收集整理的Optional变量初学者指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。