亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

打印可選變量

打印可選變量

MM們 2019-10-18 14:02:58
我正在嘗試這些代碼行class Student {    var name: String    var age: Int?    init(name: String) {        self.name = name    }    func description() -> String {        return age != nil ? "\(name) is \(age) years old." : "\(name) hides his age."    }}var me = Student(name: "Daniel")println(me.description())me.age = 18println(me.description())上面的代碼產生如下Daniel hides his age.Daniel is Optional(18) years old.我的問題是為什么那里有可選(18),我如何才能刪除可選的而只是打印Daniel is 18 years old.
查看完整描述

3 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

您必須了解什么是可選的。許多Swift初學者認為var age: Int?,年齡是一個可能具有或沒有價值的Int。但這意味著年齡是一個可選參數,它可能包含也可能不包含一個整數。


在description()函數內部,您不打印Int,而是打印Optional。如果要打印Int,則必須解開Optional。您可以使用“可選綁定”解開可選:


if let a = age {

 // a is an Int

}

如果確定Optional包含一個對象,則可以使用“強制展開”:


let a = age!

或者在您的示例中,由于您已經在description函數中測試了nil,因此您可以將其更改為:


func description() -> String {

    return age != nil ? "\(name) is \(age!) years old." : "\(name) hides his age."

}


查看完整回答
反對 回復 2019-10-18
?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

出于測試/調試的目的,我經常想將可選內容作為字符串輸出,而不必始終測試nil值,因此我創建了一個自定義運算符。


在閱讀了另一個問題的答案后,我甚至進一步改善了情況。


fileprivate protocol _Optional {

    func unwrappedString() -> String

}


extension Optional: _Optional {

    fileprivate func unwrappedString() -> String {

        switch self {

        case .some(let wrapped as _Optional): return wrapped.unwrappedString()

        case .some(let wrapped): return String(describing: wrapped)

        case .none: return String(describing: self)

        }

    }

}


postfix operator ~? { }

public postfix func ~? <X> (x: X?) -> String {

    return x.unwrappedString

}

顯然,可以根據自己的喜好調整操作符(及其屬性),也可以將其設置為函數。無論如何,這使您可以編寫如下的簡單代碼:


var d: Double? = 12.34

print(d)     // Optional(12.34)

print(d~?)   // 12.34

d = nil

print(d~?)   // nil

集成了其他人的協議思想后,它甚至可以與嵌套的可選對象一起使用,而嵌套可選對象通常在使用可選鏈接時發生。例如:


let i: Int??? = 5

print(i)              // Optional(Optional(Optional(5)))

print("i: \(i~?)")    // i: 5


查看完整回答
反對 回復 2019-10-18
  • 3 回答
  • 0 關注
  • 525 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號