我是 Swift语言的新手,到目前为止,我只从事 Web开发。
我试图掌握可选的想法,但是每次他们提出使用它的某种情况时,我仍然不明白为什么这么做(或者我可能有一点想法,但仍然不确定)。
我读了几篇关于此的文章,也许我对此一无所知,迷路了。
因此,让我们举一些例子。假设我有一个带有文本字段的电子邮件注册表格。发送表单后,在PHP中我可以执行以下操作:
$mail = $_POST['mail'];
if($mail == "") {
echo "ERROR: The E-mail is empty";
} else {
// Do something more
}
如果文本字段为空,则$ _POST ['mail']的值为空字符串。我可以使用它,并检查它是否为空。
现在,如果我理解正确,那么迅速地,该文本字段的值将不是一个空字符串,而是一个零,对吧?这就是为什么我们需要可选的区别吗?因为与PHP相比,在Swift中我每次必须声明该信息的类型,并且它不知道该文本字段是否传递字符串或数字?
让我们讨论另一个例子。许多 swift 中的人只是将字符串声明为可选字符串,即使他们在其中添加了值也是如此:
let name:String? = "Gabriel"
如果已经有一个值,那么为什么要使其成为可选值呢?对我来说,它只是一个带有值的普通常量,我看不出将其包装到可选值中的意义。
如果我在声明中不知道名字,为什么我不能只输入这个?
let name:String = ""
然后,我可以使用if语句检查它是否为空
if name == "" {
print("ERROR: name is empty")
} else {
//Do something else
}
我对文本字段的想法是否正确?
有什么我想念的吗?
感谢您的任何帮助!
编辑(是什么让我理解了这个概念):
我最困惑的是一个简单的事实,例如字符串只能存储“文本” ,并且如果nil是某种东西,它将不是String类型,因此不会是““”存储在String中,当然是。
就像以同样的方式,因为我无法将文本存储到Integer中-,所以我无法将nil“存储”到字符串中。
但是通过Optional String,我可以使用此“包装器” ,实际上可以“存储”两种类型:字符串或nil。这就是区别常规字符串和可选字符串的原因。正是这种“包装器”能够“保留”这两种类型,直到我需要使用实际值为止。 (现在我当然知道,零实际上是没有任何值。我只是用这种方式来说明这一点)
谢谢你们每一个人的帮助!
最佳答案
假设您从ebay订购了一个Playstation。您看到的第一件事不是Playstation,而是盒子。因此,在这种情况下,此框是可选的。让我们写下来。
var playstation: Playstation?
盒子当然可以是空的。为了使用Playstation,我们需要打开盒子。我们有几种方法可以做到这一点。
安全的方法:
if let ps = playstation {
// if the box is not empty, and the PS is there
ps.play()
} else {
print("The box was empty :(")
}
另一种方法:
playstation?.play()
在这种其他情况下,我们仅在playstation框的内容不为空时才调用play()方法。缺点是,如果失败,您将无法显示错误。
如果您答应了您的 friend ,您将在今天将在这里的Playstation上一起玩怎么办。您要保证Playstation会放在盒子里。那是当您使用此:
playstation!.play()
在实际程序中,这种方法的问题在于,如果可选内容为空,则您的应用程序将崩溃。用 ”!”仅当您可以保证它不会为空时(即您在此之前为变量分配了一个值)
因此,总而言之,可选变量是其值可以是特定类型(即String)或 nil 的变量。您不能将 nil 分配给强类型变量。
var a: String?
var b: String
a = nil // this is ok
b = nil // this will not compile
关于php - 我还是听不懂Optionals,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48204261/