如何编写它以便在用户完成使用字段时更新变量(对于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
}
即使使用" - >字符串"并且返回符号仍然抱怨未使用的变量。我显然不太了解我的语法。
编译器还抱怨ViewController没有被初始化。
答案 0 :(得分:1)
您需要覆盖func controlTextDidEndEditing(_ obj: Notification)功能
你应该看看:
userInfo(obj的属性) - 包含"NSTextMovement"
键,可让您定义用户结束编辑的方式。
override func controlTextDidEndEditing(_ obj: Notification){
let IPString = IPField.stringValue
}
在这里,你要创造新的常数。你想要的是将这个值设置为你的类变量,所以你应该IPString = IPField.stringValue
但它不太正确,因为func controlTextDidEndEditing(_ obj: Notification)
可以从其他对象调用,所以首先应该检查obj
通知是否包含以警卫发送的对象。例如。 / p>
guard let object = obj.object else {
return
}
然后检查对象是否是带有标识运算符的IPField
guard object === IPField else {
return
}
最后,您可以将字段值分配给IPString
var
IPString = object.stringValue
希望它会对你有所帮助。哦,我的一个建议,你应该为你的变量使用较低的驼峰案例命名约定。