繁体   English   中英

更改时更新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
}

即使使用“->字符串”和返回符号,它仍然会抱怨未使用的变量。 我显然不太了解我的语法。

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

您需要重写func controlTextDidEndEditing(_ obj:Notification)函数

您应该看一下:

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

在这里,您正在创建新的常量。 您想要的是将此值设置为类变量,因此您应该使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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM