@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(我想要的文本)”。我只想要“我想要的文字”,但不需要可选。有谁可以帮助我?
答案 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;或不。