macOS Swift:根据NSCOMBOX的输入更新NSTextfield

macOS Swift:根据NSCOMBOX的输入更新NSTextfield,swift,macos,Swift,Macos,我正在练习Swift,边走边自学 到目前为止,我已经为我的工作构建了一个像样的记谱应用程序,帮助为我们工作的案例生成注释。我正在尝试实现一种功能,用户可以在NSComboBox中键入公司名称,然后,如果NSDictionary中存在相关的密钥匹配,则第二个文本字段将使用字典中的相关值进行更新 这是这样设计的,因为可能存在公司未保存的情况,因此文本将手动输入这些字段 我有代码的功能,只要用户从字典中输入一些东西。如果用户在“companyName”字段中输入了一些内容,整个过程就会崩溃,因为它会得

我正在练习Swift,边走边自学

到目前为止,我已经为我的工作构建了一个像样的记谱应用程序,帮助为我们工作的案例生成注释。我正在尝试实现一种功能,用户可以在NSComboBox中键入公司名称,然后,如果NSDictionary中存在相关的密钥匹配,则第二个文本字段将使用字典中的相关值进行更新

这是这样设计的,因为可能存在公司未保存的情况,因此文本将手动输入这些字段

我有代码的功能,只要用户从字典中输入一些东西。如果用户在“companyName”字段中输入了一些内容,整个过程就会崩溃,因为它会得到一个nil响应。我已经尝试了各种不同的方式的守卫标签或如果语句,我肯定只是做错了什么,所以我希望在如何使它不崩溃时,手动输入一些指导

(我通过Xcode UI builder控制这些元素中的大多数,这就是为什么ComboBox的项目没有在代码中列出的原因,仅供参考)


好吧,我已经玩了一点,我终于得到了它,以防将来有人试图追踪它

最终的代码是:

    @IBOutlet weak var companyID: NSTextField!
    @IBOutlet weak var companyName: NSComboBox!
    
    var theCompanies: NSDictionary? = ["Company 1" : "1", "Company 2" : "2"]
    var theID = ""

    
    
    @IBAction func nameUpdated(_ sender: Any) {
        let theID = theCompanies?.value(forKey: companyName.stringValue) as? String
        self.companyID.stringValue = theID ?? ""
    }

根据基里尔的建议,我拆除了原力展开装置,但无法使警卫声明生效。一时兴起,我为companyID.stringValue设置了默认值“”,这就成功了。可选的“展开”加上set命令的默认值将其正确连接起来。

好吧,我又玩了一点,终于得到了它,以防将来有人试图追踪它

最终的代码是:

    @IBOutlet weak var companyID: NSTextField!
    @IBOutlet weak var companyName: NSComboBox!
    
    var theCompanies: NSDictionary? = ["Company 1" : "1", "Company 2" : "2"]
    var theID = ""

    
    
    @IBAction func nameUpdated(_ sender: Any) {
        let theID = theCompanies?.value(forKey: companyName.stringValue) as? String
        self.companyID.stringValue = theID ?? ""
    }

根据基里尔的建议,我拆除了原力展开装置,但无法使警卫声明生效。一时兴起,我为companyID.stringValue设置了默认值“”,这就成功了。可选的“展开”与set命令的默认值相结合,将其正确连接。

“不能让guard语句声明变量”“不能让guard语句声明变量”