【问题标题】:Convert String to URL (Why is resulting variable nil)将字符串转换为 URL(为什么结果变量为零)
【发布时间】:2020-01-28 23:46:59
【问题描述】:

我正在尝试从字符串值创建 URL 变量。我不明白为什么生成的 URL 是 nil

我已经建立了一个新的 Xcode macOS 项目,在视图上放置了一个简单的按钮,为该按钮创建了一个动作并实现了以下代码。结果 url 为 nil。

我在 Swift 操场上尝试了同样的方法,并且成功了...

    @IBAction func buttonClicked(_ sender: Any) {
        let urlAsString = "http://www.google.de/"
        let url = URL(string: urlAsString)

        if url != nil {
            // Do work...
        }
    }

urlAsString 是“@​​987654321@”但是 网址为零

debugger

【问题讨论】:

  • @Sh_Khan 不适合我。检查我编辑的帖子。我附上了调试器的截图
  • 将“做工作”评论更改为打印声明print("it worked")。运行应用程序,没有断点。打印出来了吗?
  • @matt 是的,它确实打印出“它有效”。好像只显示错误的变量内容?
  • 好的,太好了!因此,要么 (1) 您使用错误的调试器,要么 (2) 调试器有错误 - 它显示 nil 但事实是 not nil。并且(2)是完全可能的!因此,无论哪种方式,您都无需担心;你的代码工作正常。问题只是url 值的调试器显示。别担心,开心就好。

标签: swift macos cocoa url null


【解决方案1】:

您在调试器中发现了一个错误!

[此错误将在 Xcode 12.5 中修复。]

很容易重现它:

我们已经在条件内部的断点处暂停。所以很明显url 不是 nil 否则我们根本不会在这里。

证明这一点的另一种方法是在控制台中po url(参见此屏幕截图的右下角):

尽管如此,url 在工具提示和变量列表中都显示为nil。所以调试器只是在骗你:url 不是零。别担心,开心就好。您的代码运行良好。

EDIT 该错误与 Swift Foundation 覆盖有关。如果你把url的声明改成这样:

let url = NSURL(string: urlAsString)

...然后一切都按预期进行。

另见https://stackoverflow.com/a/58156592/341994

【讨论】:

  • 感谢您的详细解释。作为一个 Swift 新手,我从来没有想过要在 Xcode 中找到一个错误 :-)
  • “别担心?”。此错误极有可能导致大量错误和数小时的时间浪费:/。感谢@matt 展示了如何轻松重现它,所以我可以提交另一个错误报告。
  • 我刚开始学习 Swift,很困惑,花了 2 个小时才找到这个答案:(
  • 男人!!!!我盯着屏幕看了 4 个小时,戳了一些实际工作的代码,在 URL NSURL 之间切换,都是因为这个调试器错误,感谢 @matt 的这篇文章:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
相关资源
最近更新 更多