swift - 打印可选变量

标签 swift

我正在尝试这些代码行

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 = 18
println(me.description())

以上代码生成如下

Daniel hides his age.
Daniel is Optional(18) years old.

我的问题是为什么那里有可选的(18),我怎样才能删除可选的并只打印

Daniel is 18 years old.

最佳答案

您必须了解 Optional 的真正含义。许多 Swift 初学者认为 var age: Int? 意味着 age 是一个可能有值也可能没有值的 Int。但这意味着 age 是一个 Optional,它可能包含也可能不包含 Int。

在您的 description() 函数中,您不打印 Int,而是打印 Optional。如果你想打印 Int,你必须打开 Optional。您可以使用“可选绑定(bind)”来解包可选:

if let a = age {
 // a is an Int
}

如果你确定 Optional 持有一个对象,你可以使用“强制展开”:

let a = age!

或者在您的示例中,由于您已经在描述函数中对 nil 进行了测试,您可以将其更改为:

func description() -> String {
    return age != nil ? "\(name) is \(age!) years old." : "\(name) hides his age."
}

关于swift - 打印可选变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25846561/

相关文章:

ios - 如何为 Google VR iOS pod 添加触摸手势?

ios - 自定义 Apple map 注释无法正常工作

swift - 如何使警报中的取消按钮取消操作?

swift - 使用未解析的标识符 "GMSAutocompleteFilter"

xcode - 由于信号 : Segmentation fault: 11 (xcode 7),命令失败

ios - 事件指示器未出现

ios - 将 NSManagedObject 从一个 View Controller 传递到另一个 View Controller

ios - 无法将函数转换为方形颜色

ios - "type of expression is ambiguous without more context"- 引用 appDelegate

ios - 在后台模式下保持 XMPP 连接作为 BLE 附件(iOS、Swift)