【问题标题】:Swift 4 change string to URL [closed]Swift 4 将字符串更改为 URL [关闭]
【发布时间】:2018-08-04 03:17:26
【问题描述】:

我对 swift 还很陌生,但我已经尝试了所有方法,但无法使其正常工作。

var itemValue: String!
var itemURL: URL!

override func viewDidLoad() {
    super.viewDidLoad()

    print("itemValue is", itemValue!)
    guard let itemURL = URL(string: itemValue) else {
        return
    }

itemURL 没有得到一个值,即使我已经验证 itemValue 字符串设置正确(在以前的 vc 中,准备 segue)。

【问题讨论】:

  • 你可以在这里添加你的 url 字符串吗?
  • 重点是,并非每个字符串都是有效的 URL。所以itemValue 很容易成为其中之一。
  • 只是一个 URL,类似于website.com。这是一个有效的网址
  • 我不在乎它“像什么”。你需要告诉我们它是什么
  • 此外,字符串website.com 不是有效的URL,这是一个主机名。包含主机名的有效 URL 必须以非空方案组件开头,后跟冒号(请参阅规范)。一些浏览器允许你给他们一个主机名,你应该给他们一个 URL,但这并不意味着这是一个有效的 URL。

标签: swift string url


【解决方案1】:

当您编写guard let itemURL = URL(string: itemValue) 时,您创建了一个名为itemURL 的新局部常量,它与同名的全局变量 无关。此外,这个新的局部常量与全局变量的类型不同。全局变量是隐式解包的可选项,所以这是可选项,但局部常量不是可选项。

这就是你说 itemURL 没有得到值的原因:你希望名为 itemURL 的全局变量得到一个值,但你只为同名的局部常量设置了一个值.这两个相似的标识符不会将它们的内容存储在相同的内存位置。

【讨论】:

  • 非常感谢您的解释。我不敢相信我错过了。我删除了全局变量,但仍然没有在 itemURL 中获得值。
  • viewDidLoad()末尾添加print("content:", itemURL),你会看到在itemURL中得到了一个值。如果没有,请给出整个代码,因为使用您在问题中编写的 sn-p,您必须在 itemURL 中获取值。
【解决方案2】:
let url : String = "url string here"
let urlStr : String = url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
let convertedURL : URL = URL(string: urlStr)!
print(convertedURL)

尝试将您的 URL 字符串放入此代码中,我希望它对您有用。

【讨论】:

    猜你喜欢
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 2013-09-15
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多