如何将可选字符串转换为字符串

时间:2016-01-27 20:04:16

标签: swift optional

@IBOutlet var navBar: UINavigationBar!
@IBOutlet var menuButton: UIBarButtonItem!
@IBOutlet var topicNameLabel: UILabel!
var topicName:String!
override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    menuButton.target = self.revealViewController()
    menuButton.action = Selector("revealToggle:")

    navBar.barTintColor = UIColor(red: 0, green: 0.4176, blue: 0.4608, alpha: 1)
    topicNameLabel.text = self.topicName

}

这是我的代码,我将通过prepareForSegue将字符串传递给topicName,但是,我发现在模拟器中,我的topicNameLabel显示“Optional(我想要的文本)”。我只想要“我想要的文字”,但不需要可选。有谁可以帮助我?

3 个答案:

答案 0 :(得分:4)

问题不在这里

您的财产被声明为implicitly unwrapped optional String

var topicName: String!

因此,当您使用它时,该值将自动解包。

示例:

var topicName:String!
topicName = "Life is good"
print(topicName)

<强>输出

  

生活是美好的

正如您所看到的输出中没有 Optional(Life is good)。 所以这段代码是正确的。

我的理论

我的猜测是,您使用已包含topicName字词的String填充Optional(...)

这就是您在输出中获得Optional(...)的原因。

测试我的理论

要测试此方案,我们将向您的属性添加一个观察者

willSet(newValue) {
    print("topicaName will be set with this: \(newValue)")
}

我希望你会在日志中看到类似的东西

topicaName will be set with this: Optional(Hello)

找到真正的问题(又名是谁写的字符串'可选(“你好”)'?)

如果确实发生这种情况,只需在观察者中放置一个断点,并在项目中找到在您的属性中写入字符串Optional("Hello")的指令。

答案 1 :(得分:3)

可选字符串表示字符串可能为零。 来自"The Basics" in the Swift Programming Language

  

Swift还引入了可选类型,它们处理缺少值。

在控制台上打印可选字符串时,它会告诉您它是可选的。所以字符串dos的值不包含&#34; Optional&#34;关键字...

例如

var str : String?
str = "Hello" // This will print "Optional("Hello")"
print(str)
print(str!) // This will print("Hello") 

但是str值是&#34;你好&#34; 。它是一个可选的字符串

答案 2 :(得分:3)

我认为你的问题是你的字符串确实包含&#34;可选&#34;,你可以尝试使用indexAt(0)来查看&#34; o&#34;或不。