在Swift中,let url = URL(string: item)!返回nil。

3

真的想不出来,这个URL被打印出来并不等于nil,而且在我粘贴到浏览器中时也可以使用。有什么建议吗?

import UIKit

class WebViewController: UIViewController {

    var postLink: String = String()
    @IBOutlet weak var mywebView: UIWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        print(postLink)

        let attempt = postLink
        let url: URL = URL(string: attempt)!
        let request: URLRequest = URLRequest(url: url)
        mywebView.loadRequest(request)

    }

错误发生在:

let url: URL = URL(string: attempt)!

(说明:该代码片段是关于IT技术的内容)

1
为什么不提供URL?let attempt = postLink是做什么的?当您尝试在viewWillAppear中加载4行代码时,会得到什么?分配后url的值是多少?实现UIWebViewDelegate并查看事物是否进展或失败。 - meaning-matters
发生的情况是URL末尾有一些额外的空格和换行符,感谢您的帮助。 - Noah
2个回答

2
我猜你正在从另一个控制器传递urlString,那就这样做吧。
var postUrlString:String? //<-- make it optional 

override func viewDidLoad() {
   super.viewDidLoad()

   guard let urlString = postUrlString, // forced unwrapped 
         let url = URL(string: urlString)
        else {  return }  // if there is any optional we return 
 // else continue
        let request: URLRequest = URLRequest(url: url)
        mywebView.loadRequest(request)

}

// 如果有任何可选项需要返回,这是什么意思? - Mohammad Sadiq
如果在这种情况下postUrlString或url为空,则为“nil” @MohammadSadiq - Lamour
请将其更改为“如果某些内容为空”。因为它是可选的,我们要检查的是它是否为空。 - Mohammad Sadiq
这是关于编程的内容,翻译成中文。请只返回已翻译的文本:这就是代码所做的,哈哈,第一行尝试从可选项中提取urlString,如果成功,则创建URL,否则不执行其余代码。 - Lamour
我使用了守卫方法,它可以工作,不再是nil,但是webview无法加载请求?postLink也可以正常打印。 - Noah

2
错误很简单,您提供的用于创建URL的postLink不正确。我猜测它是空的(只是猜测),您可能忘记设置它了。
尽量避免在代码中使用强制解包。您应该在各种情况下使用guard letif let。在您的情况下,当无法加载时,您可能希望向用户显示一些错误信息,而不是...
let url: URL = URL(string: attempt)!

使用

    if let url = URL(string: attempt) {
        let request = URLRequest(url: url)
        mywebView.loadRequest(request)
    } else {
// Do something like. Show an alert that could not load webpage etc. 
}

或者你可以使用guard let,但是需要从使用它的函数中返回。想了解更多关于ifguard let的用法,你可以阅读我的博客文章这里


使用守卫方法取得了成功,但现在无法加载Web视图,有什么建议吗? - Noah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接