让函数等待响应 - Swift

Let a function wait for response - Swift

我正在尝试编写文字冒险游戏。我有一个 NSTextView,用户可以在其中编写命令并获得响应,但我找不到 "pause" 等待用户响应的函数。

import Cocoa

@IBOutlet var textView: NSTextView!

var playerName:String = ""
var enteredString:String = ""

//Keyboard Input

private func returnChar(theEvent: NSEvent) -> Character?{
    let s: String = theEvent.characters!
    for char in s{
        return char
    }
    return nil
}

override func keyUp (theEvent: NSEvent) {
    let s: String = String(self.returnChar(theEvent)!)
    enteredString.extend(s)

    if theEvent.keyCode == 36 {

        //Here I'd like to 
        //say that start() 
        //should continue

    }
}

//Story

func start() {
    textView.string?.extend("Hi, what's your name?\n")

    //Here I'd like to 
    //wait for the
    //users response

    playerName = enteredString
    textView.string?.extend("Are you sure that I should call you \(playerName)")

}

感谢您的回复:D

如果您使用的是 Swift 2,则可以使用 readLine() 等待用户在命令行中按下回车键。它是 returns 字符串?因为用户可以在不输入任何内容的情况下按回车键。

我建议在 NSTextView 中等待输入不是一个好的策略。

如果您有一种方法可以知道您的应用程序处于什么状态怎么办?然后,每当您获得要使用的文本时,将其发送到该方法并让它根据状态决定如何使用它(名称,命令...)。同时,您的应用刚刚返回到 运行 循环,让用户可以做他们想做的事。

为用户输入添加 UITextField 委托和 UITextField。将 UITextField 委托设置为 self 并添加方法:'textFieldShouldReturn'.

在此方法中,每当用户输入内容时处理逻辑。 这是一个简短的片段:

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    var userInputTextField: UITextField?

    override func viewDidLoad() {
        super.viewDidLoad()

        userInputTextField = UITextField(frame: CGRectMake(0, 100, view.frame.width, 100))
        userInputTextField?.delegate = self
        userInputTextField?.returnKeyType = UIReturnKeyType.Done
        view.addSubview(userInputTextField!)
    }

    func textFieldShouldReturn(textField: UITextField) -> Bool {
        println(textField.text)
        return true
    }
}