Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我仍然可以';我不懂期权_Php_Ios_Swift - Fatal编程技术网

Php 我仍然可以';我不懂期权

Php 我仍然可以';我不懂期权,php,ios,swift,Php,Ios,Swift,我对Swift语言是新手,在此之前我只从事web开发。 我试图理解optionals的概念,但每次他们提出一些使用它的情况时,我仍然不理解他们为什么这样做(或者我可能有一点想法,但仍然不确定) 我读了几篇关于这方面的文章,也许我只是一路上对它太困惑而迷路了 让我们举几个例子。假设我有一个带有文本字段的电子邮件登记表。发送表单后,我可以使用PHP执行以下操作: $mail = $_POST['mail']; if($mail == "") { echo "ERROR: The E-ma

我对Swift语言是新手,在此之前我只从事web开发。

我试图理解optionals的概念,但每次他们提出一些使用它的情况时,我仍然不理解他们为什么这样做(或者我可能有一点想法,但仍然不确定)

我读了几篇关于这方面的文章,也许我只是一路上对它太困惑而迷路了

让我们举几个例子。假设我有一个带有文本字段的电子邮件登记表。发送表单后,我可以使用PHP执行以下操作:

$mail = $_POST['mail'];

if($mail == "") { 
    echo "ERROR: The E-mail is empty";
} else {
    // Do something more
}
如果textfield为空,则$\u POST['mail']的值为空字符串。我可以用它来检查它是否是空的

现在,如果我理解正确的话,在swift中,文本字段的值不是空字符串,而是一个nil,对吗?这就是为什么我们需要选择的原因吗?因为与PHP相比,在Swift中,我每次都必须声明该信息的类型,它不知道该文本字段是否传递字符串或数字

让我们谈谈另一个例子。swift中的许多人只是将字符串声明为可选字符串,即使他们在其中输入了值,如下所示:

let name:String? = "Gabriel"
如果它已经有了一个值,那么为什么要将其设为可选值呢?对我来说,它只是一个带值的普通常量,我看不出把它包装成可选值有什么意义

如果我不知道声明中的名称,为什么我不能直接键入它?

let name:String = ""
然后,我可以使用if语句检查它是否为空

if name == "" {
  print("ERROR: name is empty")
} else {
  //Do something else
}
我对文本字段的理解正确与否? 有什么我遗漏的吗

谢谢你的帮助

编辑(是什么让我理解了这个概念):

我最困惑的是一个简单的事实,例如字符串只能存储“text”,如果nil是某种东西,它就不是String类型,因此它当然不能“存储”在字符串中

x = 10 // 
enum x(optional){
     case T = 10
     case nil 
 }
同样,由于我不能将文本存储为整数-我不能将nil“存储”为字符串。

但是对于可选字符串,我可以使用这个包装器,它实际上可以存储两种类型:字符串或nil。这就是常规字符串和可选字符串的区别。正是这个“包装器”能够“保存”这两种类型,直到我需要使用实际值为止。(现在我当然明白了,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 box的内容不为空时调用play()方法。缺点是在错误失败时无法显示错误

如果你答应你的朋友今天在你的playstation上一起玩呢。你保证playstation会在盒子里。当您使用此选项时:

playstation!.play()
在实际程序中,这种方法的问题在于,如果可选内容为空,应用程序将崩溃。仅当您可以保证它不会为空时才使用“!”(即在此之前您为变量分配了一个值)

因此,总而言之,可选变量是其值可以是特定类型(即字符串)或nil的变量。不能将nil赋值给强类型变量

var a: String?
var b: String

a = nil // this is ok
b = nil // this will not compile
实际上

let name:String? = "Gabriel"
这不是很有用。 但是

确实有意义,因为可以进一步设置为零

选项对于从函数返回值非常有用。 考虑返回INT.< /P>的FUNC。 如果找不到该值,则可以返回一个数字(如非常大的负数)来通知找不到该值。但终有一天func会返回此值(甚至不太可能)。
返回一个nil,让函数表明它没有找到值。

考虑如下选项:

可选变量是一个变量,将来甚至现在都可以为空。

使变量成为可选变量意味着它被包装为枚举。

假设有一个变量:
var x:Int?
,这意味着一个名为x的Int类型变量尚未初始化,是可选的

这通常可以用外行术语表示为

Enum x(optional) // name of the variable{
 case T: // some value
 case nil: // no value
}
因此,当我们分配一个变量时,我们可以正常分配它,但是该值存储在可选枚举变量x的案例T中

x = 10 // 
enum x(optional){
     case T = 10
     case nil 
 }
当我们想要使用它(获取值)时,我们使用(?)或(!)

这些可以进一步解释为

打印(x?
/如果x中有任何值,请给我(在这种情况下,请给我x的T值)

打印(x!)
/我不在乎x里面是否有任何值,不管怎样,只要给我就行了。

因此,如果x没有值,那么打印(x!)将产生崩溃,因为x内部没有值

-安全地展开可选的

-强制展开可选的


我知道我遗漏了一些东西,但这是可选的jist,这只是为了解释。一旦你掌握了这个概念,你可以在苹果的文档中进一步查看更多的文档

我对optionals的理解是,它们是一种类似字符串、Int或Double的类型。可选的有一个