Swift nil可选String =空字符串

时间:2015-08-05 15:46:01

标签: string swift struct optional

这个对我来说根本没有意义。我有一个结构,需要一些字符串:

public struct Organization {
  let id: String
  let name: String
  let legacyID: String?
  let rID: String?

  public init(id: String, name: String, legacyID: String?, rID: String?) {
    self.id = id
    self.name = name
    self.legacyID = legacyID
    self.rID = rID
  }
}

请注意,legacyIDrID是可选的。但是,如果我尝试将它们中的任何一个设置为nil.None,则将它们设置为""(空字符串)。例如:

let org = Organization(id: company.companyID, name: company.name, legacyID: company.context, rID: nil)

然而,当我尝试访问rID时,它显示为""而不是nil。我甚至尝试在nil中直接设置init,但仍设为""。这搞砸了我的平等检查。有谁知道发生了什么事?

注意:这是Swift 1.2

2 个答案:

答案 0 :(得分:1)

您输入“”作为输出,因为您的数据类型是String。因此,如果任何String变量为空或为零,则它始终显示为“”。使用String类型不能将nil作为输出。即使你直接指定nil,也不会发生相同的输出。

编辑: 这是我从你的代码得到的。它工作正常。 enter image description here

答案 1 :(得分:0)

事实证明问题是调试器。如果我使用调试器来检查值,即使在调试器提示符中,p/po/print org.rID它也返回了不正确的值。但是,在我的代码中插入println(org.rID)会打印正确的值nil。当我无法信任调试器时,我讨厌它。他们也从gcd切换到lldb时发生了。希望这在Xcode 7中得到了理解。