Swift中的第一个程序 - HelloWorld

时间:2016-02-14 22:16:29

标签: ios xcode swift

我在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。

3 个答案:

答案 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)

请注意:正如我在开始时所说的那样,这种习惯会出现在奇怪的地方。如果将Optionals绑定到文本字段或表列之类的内容中,则在不期望它时会看到它。我强烈建议为所有UI工作制作getter / setter属性,并使用guard来解开,而不是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"