1

也许我还很困惑。我以为我理解了基本概念,但是在 xcode 中玩耍时,我没有得到我认为应该做的事情 采取以下代码

var title: String? = "hello world"
println("\(title)")

我认为这会给我一个错误,因为我认为应该必须解开标题,因为我正在访问它,但它似乎编译得很好。有人可以对此有所了解。

4

5 回答 5

2

可选项是Printables,这意味着您可以将它们打印到输出流(此处为控制台)。Optional("hello world")您应该在控制台中看到类似的东西,而不是hello world

于 2015-05-02T19:37:37.480 回答
0

所有可选的是,如果它为 nil,则应用程序不会崩溃。如果你把消除标记,并且没有分配一个值,它会崩溃。

在 if 语句中,您可以检查变量是否为 nil:

if (title == nil) {

//this works

}
于 2015-05-02T19:34:47.310 回答
0
var title: String? = "hello world"
println("\(title)") // This would print out Optional(Title)
var title2: String! = "hello world"
println("\(title2)") // This would print in Title

可选的,当它们在没有值的情况下执行时不会导致您的程序崩溃,但 !(variable) 如果它们没有值将导致您的代码崩溃。

斯威夫特文档

如上所述,可选项表示允许常量或变量“无值”。可以使用 if 语句检查可选项以查看值是否存在,并且可以使用可选项绑定有条件地解包以访问可选项的值(如果确实存在)。

于 2015-05-02T19:36:18.187 回答
0

根据文档,您的声明将转换为

var title: Optional<String> = Some("hello world").

从 Apple 文档中,可选的是

enum Optional<A> {
case Nil
case Some(A)
}

因此,当您将值传递给可选时,在声明时,编译器会理解,它有一个值,这就是它没有显示错误的原因。

但是,如果您执行以下代码,您可能会得到不同的结果。

var title: String? = "hello world"
title = nil
println("\(title)")

它将在操场上打印“nil”。

于 2015-05-02T19:49:16.157 回答
0

Based on apple doc

The concept of optionals doesn’t exist in C or Objective-C. The nearest thing in Objective-C is the ability to return nil from a method that would otherwise return an object, with nil meaning “the absence of a valid object.” However, this only works for objects—it doesn’t work for structures, basic C types, or enumeration values. For these types, Objective-C methods typically return a special value (such as NSNotFound) to indicate the absence of a value. This approach assumes that the method’s caller knows there is a special value to test against and remembers to check for it. Swift’s optionals let you indicate the absence of a value for any type at all, without the need for special constants.

Example

let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // requires an exclamation mark

let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // no need for an exclamation mark

Reference: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html

于 2015-05-03T18:04:41.777 回答