我在Swift中的第一个代码遇到了一些问题,当我运行它时,看起来很好,但是它显示了例如Hello Optional"(name)"而不是Hello(名字)。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var helloLabel: UILabel!
@IBOutlet weak var nameTextField: UITextField!
@IBOutlet weak var sayHelloButton: UIButton!
@IBAction func sayHelloAction(sender: AnyObject)
{
let name = nameTextField.text
if name!.isEmpty {
let alert = UIAlertController(title: "Error", message: "Please enter a name", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
} else {
helloLabel.text = "Hello \(name)!"
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
setupUI()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func setupUI() {
helloLabel.text = "Hello There!"
helloLabel.textColor = UIColor.blueColor()
helloLabel.textAlignment = NSTextAlignment.Center
nameTextField.placeholder = "Enter your name"
sayHelloButton.setTitle("Say Hello", forState: .Normal)
}
}
有人可以帮助我吗?
DOMS。
答案 0 :(得分:5)
在Swift中,您有一个名为Optional
的类型。这用于表达可空性。您需要执行所谓的unwraping可选项。我会阻止你强行打开!
它会导致你的应用程序崩溃。您可以使用if let
语句打开可选值:
@IBAction func sayHelloAction(sender: AnyObject) {
if let name = nameTextField.text where !name.isEmpty {
helloLabel.text = "Hello \(name)"
} else {
let alert = UIAlertController(title: "Error", message: "Please enter a name", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
}
}
答案 1 :(得分:0)
当我刚刚学习Swift时,我遇到了这种情况,它往往会在各种各样的地方出现。例如,我无法理解为什么我的一个tableview列总是说“0”而不是“1”或“2”。实际上是在说“O”ptional!
最简单的解决方案是guard
无处不在。这样编译器知道你已经检查过它不是nil,并为你“解开”这个值。所以代替:
let name = nameTextField.text
做一个:
guard let name = nameTextField.text else { return }
将return
替换为更合适的内容。从那时起,name
就是字符串,不再有Optional(theThingYouReallyWanted)
。
return
回拨空字符串或类似的东西。
答案 2 :(得分:-1)
您获得Optional("")
,因为未解包可选值。您需要在对象后放置一个!
,然后您再也无法获得Optional("")
位。我会告诉你代码,但你还没有向我们展示print()
声明。我在下面做了一些样本,我认为会复制这个问题,虽然我还没有尝试过。
var value:String?
value = "Hello, World"
print("The Value Is \(value)") // Prints "The Value Is Optional(Hello, World)"
print("The Value Is \(value!)")// Prints "The Value Is Hello, World"