【问题标题】:Let a function wait for response - Swift让函数等待响应 - Swift
【发布时间】:2015-07-31 12:47:41
【问题描述】:

我正在尝试编写文本冒险。我有一个 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 response wait adventure


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        在此方法中,只要用户输入内容,就会处理逻辑。 这是一个简短的 sn-p:

        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
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2018-12-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-19
          • 1970-01-01
          • 2019-10-20
          • 2020-11-06
          • 1970-01-01
          相关资源
          最近更新 更多