让函数等待响应 - 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
}
}
我正在尝试编写文字冒险游戏。我有一个 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
}
}