更改时更新 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)函数
你应该看看:
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
希望对您有所帮助。哦还有我的一个建议,你应该为你的变量使用小驼峰命名约定。
我该如何编写,以便在用户完成使用该字段时更新变量(对于 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)函数
你应该看看:
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
希望对您有所帮助。哦还有我的一个建议,你应该为你的变量使用小驼峰命名约定。