繁体   English   中英

Swift - NSURL错误

[英]Swift - NSURL error

尝试使用下面的NSURL类时出错,下面的代码实际上是试图将我从Facebook拉入的图像存储到imageView 错误如下:

value of optional type 'NSURL?' not unwrapped, did you mean to use '!' or '?' 

不知道为什么会这样,帮忙!

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var myImage: UIImageView!

    override func viewDidLoad() {

        super.viewDidLoad()

        let myProfilePictureURL = NSURL(string: "http://graph.facebook.com/bobdylan/picture")
        let imageData = NSData(contentsOfURL: myProfilePictureURL)
        self.myImage.image = UIImage(data: imageData)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

你正在调用的NSURL构造函数有这个签名:

convenience init?(string URLString: String)

表示构造函数可能不返回值,因此它被视为可选

NSData构造函数也是如此:

init?(contentsOfURL url: NSURL)

快速解决方法是:

let myProfilePictureURL = NSURL(string: "http://graph.facebook.com/bobdylan/picture")
let imageData = NSData(contentsOfURL: myProfilePictureURL!)
self.myImage.image = UIImage(data: imageData!)

最好的解决方案是检查(解包)这些选项,即使您确定它们包含值!

您可以在此处找到更多关于选项的信息: 链接到官方Apple文档

正如评论中所指出的,编译器会告诉您确切要做什么,并且Xcode提供了一个修复程序 - 呃,修复它。

原因如下: NSDatainit(contentsOfURL:)初始化程序采用非可选的NSURL引用。 这意味着你不能通过传递nil而不是URL来初始化数据对象 - 这样做是荒谬的。 (如果你真的想创建一个空的NSData ,请使用一个在语义上更合适的初始化程序。)这也意味着你不能传递一个可能是nil的引用 - 也就是说,是一个可选的

当您收到可选项时,需要在传递给需要非可选引用的代码之前检查并解包它。 (请参阅Swift编程语言的上述部分,了解您可以执行此操作的所有方法。)这样做可以限制代码中的失败点数 - 而不是让API调用中断几层代码,因为您通过了它没想到,Swift会在你成为一个问题之前推动你抓住意想不到的价值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM