让函数等待响应-Swift

让函数等待响应-Swift,swift,response,wait,adventure,Swift,Response,Wait,Adventure,我正在尝试编写一个文本冒险。我有一个NSTextView,用户可以在其中编写命令并获得响应,但我找不到“暂停”函数以等待用户响应的方法 import Cocoa @IBOutlet var textView: NSTextView! var playerName:String = "" var enteredString:String = "" //Keyboard Input private func returnChar(theEvent: NSEvent) -> Charac

我正在尝试编写一个文本冒险。我有一个NSTextView,用户可以在其中编写命令并获得响应,但我找不到“暂停”函数以等待用户响应的方法

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(),等待用户在命令行中按enter键。它返回字符串?因为用户可以在不键入任何内容的情况下按enter键。

我建议在
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
    }
}