【问题标题】:Link to multiple websites链接到多个网站
【发布时间】:2017-04-08 17:41:12
【问题描述】:

我想创建一个链接,但是当按下它时,它会从列表中随机选择一个链接。我已经有了将按钮作为链接的代码,但是我将如何修改它,以便在单击不同时间时随机选择添加更多网址。

当前链接代码:

@IBAction func Website(_ sender: Any) {

        if let url = NSURL(string: "http:heeeeeeeey.com/"){
            UIApplication.shared.openURL(url as URL)
        }
    }

【问题讨论】:

  • 你为什么在 Swift 中使用NSURL?只需使用URL
  • 1) 创建一个包含所有 URL 的数组。 2) 阅读stackoverflow.com/questions/24003191/…
  • 对不起,我真的很笨,但你能帮我解决一下我该怎么做吗?我是 swift 新手,需要帮助。

标签: swift url hyperlink


【解决方案1】:

尝试类似:

@IBAction func Website(_ sender: Any) {
   let websites = ["http://website1.com",
                   "http://website2.com",
                   "http://website3.com"]
   if let url = URL(string: websites[Int(arc4random_uniform(UInt32(websites.count)))]) {
      UIApplication.shared.openURL(url as URL)
   }
}

这应该对你有用。

解释:

  • websitesStrings 的数组,因此请将您希望按钮从中选择的所有 URL 都放在其中。
  • Int(arc4random_uniform(UInt32(websites.count))) 是一个神奇的部分,它在 0websites.count 之间选择一个随机数(这是数组中的最后一项。

如果您是 Swift(或编程)新手,这可能会让您感到困惑,不要惊慌,继续练习。

祝你好运!

【讨论】:

  • 您好,非常感谢您的帮助!但我收到“websites.count”错误,说它不能将“int”类型的值转换为预期的参数类型“UInt32”?
  • @H.Sunner 我的错,完全忘记了类型不匹配。我修复了上面的代码,现在应该可以正常工作了。
【解决方案2】:

首先,创建一个 URL 字符串数组非常简单:

var urls = [
  "http://www.url1.com",
  "http://www.url2.com",
  "http://www.url3.com"
]

现在,您可以使用这行长代码获取此 urls 数组的随机元素:

let randomURL = urls[Int(arc4random_uniform(UInt32(urls.count)))]

但是,另一种方法是向Array 添加一个适用于所有数组的扩展:

extension Array {
  public var random: Element? {
    let index = Int(arc4random_uniform(UInt32(self.count)))
    return self.count>0 ? self[index] : nil
  }
}

现在,获取 urls 数组的随机元素很简单:

urls.random

这将返回一个Optional(这是因为如果数组中没有元素,则随机属性将返回nil)。因此,在您的代码中,您还需要解开 random 属性的结果:

@IBAction func Website(_ sender: Any) {
  if let urlString = urls.random,
    let url = URL(string: urlString) {
    UIApplication.shared.openURL(url as URL)
  }
}

附:您的代码中有几个 cmets:

  • 我建议您将Website 重命名为openRandomWebsite(记得也要更改情节提要连接)。方法应该解释它们的作用,并以小写字母开头。如果你有兴趣,Swift 通用代码约定here
  • openURL 方法已在 iOS 10 中弃用,因此我建议您使用open(_:​options:​completion​Handler:​) 方法。

您的代码如下所示:

UIApplication.shared.open(url, options: [:], completionHandler: { (success) in
      //URL opened
    })

【讨论】:

  • 您好,我尝试使用您的方法,但出现“无法使用实例成员 'ur;”等错误在属性初始化器中'和错误'类型'[String]'的值没有成员'random'?
  • 您是否将扩展名Array 添加到您的代码中?你在使用 Swift 3 / Xcode 8.3 吗?
猜你喜欢
  • 2020-07-26
  • 2017-06-29
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
  • 2013-08-05
相关资源
最近更新 更多