arrays - 按钮以正确的顺序访问字典数据

标签 arrays swift sorting dictionary url

我有一个按钮数组和一个字典,其中 keys 是按钮的名称,values 是一个 url 这些按钮用于打开.

所有这些都按正确的顺序排序,并显示正确的按钮名称。

我正在努力将正确的 url 传递给 openLink() 函数。

这是我的代码:

@IBOutlet var links: [UIButton]!

let keysAndValues = ["Twitter" : "https://twitter.com/",
                       "Facebook" : "https://facebook.com/",
                       "YouTube" : "https://youtube.com/"]

func setButtonName() {

    let sortedDict = keysAndValues.sorted(by: <)
    let sortedButtons = links.sorted { $0.frame.origin.y < $1.frame.origin.y }

    for (index, button) in sortedButtons.enumerated() {
        button.setTitle(sortedDict[index].key, for: UIControlState.normal)
    }
}

@IBAction func buttonTapped(_ sender: Any) {

    let sortedDict = keysAndValues.sorted(by: <)
    let sortedButtons = links.sorted { $0.frame.origin.y < $1.frame.origin.y }

    for (index, _) in sortedButtons.enumerated() {
        openLink(sortedDict[index].value)
    }
}
func openLink(_ link: String) {
    if let url = URL(string: "\(link)") {
        UIApplication.shared.open(url, options: [:])
    }
}

如何将正确的传递给openLink(_ link: String)?目前链接以随机顺序工作。

PS:每个按钮都连接到@IBOutlet@IBAction

最佳答案

您的问题是,对于每个按钮,您都会为每个按钮调用 openLink。显然,您只想调用 openLink 以获取与点击的按钮关联的一个 URL。

重写你的 buttonTapped 方法如下:

@IBAction func buttonTapped(_ sender: UIButton) {
    let title = sender.title(for: .normal)

    if let url = keysAndValues[title] {
        openLink(url)
    }
}

这会获取点击按钮的标题,并将其用作检索相应 URL 的键。

关于arrays - 按钮以正确的顺序访问字典数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49265548/

相关文章:

java - 为什么需要为Set.toArray指定一个数组,它返回一个数组?

swift - 如何在所有抛出上设置断点?

php - 根据元素出现的频率对整数数组进行排序。如果两个元素的频率相同,则它们将按升序打印

ios - 已应用 AutoLayout 约束但不起作用

ios - Swift - UITableView 滚动到底部很慢

c++ - 排序中的 < 运算符断言无效

sorting - 代码优化技巧 :

java - 从两个排序数组的交替元素生成所有可能的排序数组

java - java中for循环数组只处理一个元素?

java - 数组比较字符串