更改时更新 Swift NSTextfield 变量

Update Swift NSTextfield variable when it's changed

我该如何编写,以便在用户完成使用该字段时更新变量(对于 Cocoa?)。目的是允许用户为电视在网络上的位置指定自定义 IP 地址。

import Cocoa
import Alamofire

class ViewController: NSViewController, NSTextFieldDelegate {

@IBAction func MenuButton(_ sender: NSButtonCell) {
    triggerRemoteControl(irccc: "AAAAAQAAAAEAAABgAw==")
}
@IBAction func ReturnButton(_ sender: NSButton) {
    triggerRemoteControl(irccc: "AAAAAgAAAJcAAAAjAw==")
}

@IBOutlet var IPField: NSTextField!  // [A] Set by the user

func triggerRemoteControl(irccc: String) {
    Alamofire.request(IPField,     // [B] Goes here when it's updated.
                      method: .post,
                      parameters: ["parameter" : "value"],
                      encoding: SOAPEncoding(service: "urn:schemas-sony-com:service:IRCC:1",
                                             action: "X_SendIRCC", IRCCC: irccc)).responseString { response in
                                                print(response)
    }
}


}

—更新

我尝试声明一个变量:

var IPString: String

然后(我将 textField 的委托设置为 ViewController,并将此函数放在里面):

override func controlTextDidEndEditing(_ obj: Notification){
    let IPString = IPField.stringValue
}

即使使用“-> String”和 return 表示法,它仍然会抱怨未使用的变量。我显然不太了解我的语法。

编译器还抱怨 ViewController 没有被初始化。

你需要的是覆盖func controlTextDidEndEditing(_ obj: Notification)函数

你应该看看:

  • object (property of obj) - 有时您想知道哪个对象向您发送了结束编辑操作。

  • userInfo (property of obj) - contains a "NSTextMovement" 键,允许您定义用户结束编辑的方式。

override func controlTextDidEndEditing(_ obj: Notification){ let IPString = IPField.stringValue }

在这里,您正在创建新常量。你想要的是将这个值设置到你的 class 变量中,所以你应该 IPString = IPField.stringValue

但这不太正确,因为 func controlTextDidEndEditing(_ obj: Notification) 可以从其他对象调用,所以首先你应该检查 obj 通知是否包含使用守卫发送它的对象,例如。

guard let object = obj.object else { return }

然后检查对象是否是带有身份运算符的 IPField

guard object === IPField else { return }

最后您可以将您的字段值分配给您的 IPString var

IPString = object.stringValue

希望对您有所帮助。哦还有我的一个建议,你应该为你的变量使用小驼峰命名约定。