String Swift nil可选字符串=空字符串

String Swift nil可选字符串=空字符串,string,swift,struct,optional,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

这个对我来说毫无意义。我有一个需要几个字符串的结构:

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
  }
}
请注意,
legacyID
rID
是可选的。但是,如果我尝试将它们中的任何一个设置为
nil
.None
,它们将被设置为
(空字符串)。例:

然而,当我尝试访问
rID
时,它显示为
,而不是
nil
。我甚至尝试在
init
中直接设置
nil
,但它仍然设置为
“”
。这弄乱了我的平等检查。有人知道发生了什么吗

注意:这是Swift 1.2,因为您的数据类型是字符串,所以您将“”作为输出。因此,如果任何字符串变量为空或为零,它总是显示“”。使用字符串类型无法将nil作为输出。即使您直接指定nil,也不会发生相同的输出

编辑: 这是我从你的代码中得到的。它工作正常。

所以问题出在调试器上。如果我使用调试器检查该值,即使在调试器提示下,
p/po/print org.rID
它也返回了不正确的值。但是,在我的代码中插入一个
println(org.rID)
会打印正确的值
nil
。我讨厌我不能信任调试器。当他们也从
gcd
切换到
lldb
时发生。希望这在Xcode 7中得到澄清。

我无法重现这种行为。你能发布完整的代码来演示这个吗?不,我真的不能。。至少现在不行。我不能在一个小的独立项目中重新编程,我很确定如果我发布他们的整个代码库,我的雇主会解雇我。。。更不用说它是10的数千行代码@mattt我使用的是模块/动态框架。。。组织在模块中定义,但在“主”应用程序中设置。这可能是原因吗?我在抓救命稻草。我已经解决了这个问题,但它的存在让我感到困扰。我不是在问你的代码库。就足够重现这个问题了。是的,对不起。在一定的时间压力下,我无论如何也不能在一个较小的项目中重新编程。但这个问题仍然存在于主要项目中。然而,我知道是调试器出了问题。当我使用
println
而不是从调试器打印时,实际代码生成的结果是正确的。但我的数据类型不是
String
,而是
String?
,这是可选的。因此,将该值设置为
nil
。无一个应该有效。检查我编辑的答案。您的代码似乎工作正常。检查访问方式是否正确。
let org = Organization(id: company.companyID, name: company.name, legacyID: company.context, rID: nil)