我有一个无法解决的问题: 我有2个文件,其中一个包含元素数组(名称和图像),另一个文件尝试调用数组元素以更改UILable中的文本。
第二个文件中数组的代码:
var items: [ItemInfo] = [("AAZ-2", "AAZ-02"), ("BACT01", "Anti-Bacterial"), ("FK01", "Fresh Keeping"), ("mouse", "Anti-Rodents"), ("RIC01", "Anti-VOC"), ("UV01", "UV Protection")]
在另一个文件中,我可以从另一个文件中访问变量和数组:
let demoViewController: DemoViewController = DemoViewController()
现在,我创建一个函数,从该函数中获取代码以从数组调用文件
func newLable(){
if demoViewController.items.enumerated().first(where: {$0.element.title == "AAZ-02"}) != nil{
textLabel.text = "text1"
}else if demoViewController.items.enumerated().first(where: {$0.element.title == "Anti-Bacterial"}) != nil{
textLabel.text = "tex2"
}
但是每次在第一个(数组的元素)和第二个之间切换元素时,每次尝试运行应用程序时,我都会在标签中收到相同的文本(输出为:代码中的text1)。
谢谢大家的帮助
答案 0 :(得分:1)
我想您对“第一”的含义有误解。
First并不意味着在第一个索引处查找项目,而是 在适合您的搜索条件下查找第一个项目(在任何索引处)。
>因此,当您向数组请求“第一个”项目时,即满足您的谓词(例如,等于“ AAZ-02”),那么无论该项目在哪里,它总是会找到答案。因此,当您切换前两个项目时,此功能将找到该项目,尽管它位于较高的索引上。这意味着,您的“其他”-路径将永远不会执行。
您最好尝试一下:
// Pass in your itemInfo you want to search for
func newLabel(forItem item : ItemInfo) {
// search the first occurrence of your item
if demoViewController.items.enumerated().first(where: {$0.element.title == item.title}) != nil {
// if found -> set the itemInfo as the labelTitle
textLabel.text = item.title
}
}