在 Swift 中从 Plist 加载 Url 图像

Posted

技术标签:

【中文标题】在 Swift 中从 Plist 加载 Url 图像【英文标题】:Load Url image from Plist in Swift 【发布时间】:2016-09-27 09:16:20 【问题描述】:

我有一个 plist 在我的项目中运行,其中包含多个图像 url。我正在尝试将 url 图像传递给我的 imageView,它位于同一个 viewController 中。我从 github 中发现了类似的问题,例如 Loading/Downloading image from URL on Swift 、 Swift - Read plist ,@ 987654323@我经历了所有这些答案,但到目前为止没有运气而不是致命的崩溃。我的部分代码如下......

方法一:

    override func viewDidLoad() 
    super.viewDidLoad()

    if let path = Bundle.main.path(forResource: "apps", ofType: "plist"), 
        let root = (NSArray(contentsOfFile: path))
    
        let url = NSURL(string: path)
        let data = NSData(contentsOf: url! as URL)
        if let imageData = data    
        imageView.image = UIImage(data: imageData as Data) 
    

      **// Swift Console Printinging as Follows**

        print(root) 
        // printing all my plist url links like   icon = "https://xxxxxxxxxxx.com/image/girl_face_freckles_eyes_92358_1920x1080.jpg";

        print(url)
        // (/Users/xxxxxx/Library/Developer/CoreSimulator/Devices/52DA3F73-83E0-4C29-9DE1-D8D5F0731C13/data/Containers/Bundle/Applica ... ps.plist)

        print(data)
        // nil

        print(imageView.image)
        //nil
     else 
        print("Either the file does not exist or the root object is an array")
    

方法二:

    let path = Bundle.main.path(forResource: "apps", ofType: "plist")
    let url = NSURL(string: path!)
    let imgData = try? Data(contentsOf: url as! URL)
    let img = UIImage(data: imgData!)!

    print(img) // fatal crash


【问题讨论】:

【参考方案1】:

path 是您的 plist 的路径,而不是您的图片 URL。

图像 URL 位于“root”数组的键“icon”中。

用key获取数组的第一项和下标,你应该得到你的图片URL:

if let item = root[0] as? [String:Any] 
    if let result = item["icon"] as? String 
        print(result)
    

【讨论】:

【参考方案2】:

(NS)Bundle 中的path 是文件系统路径,这些路径必须使用URL(fileURLWithPath:) 创建

let path = Bundle.main.path(forResource: "apps", ofType: "plist")
let url = URL(fileURLWithPath: path!) 

但是为什么没有人使用更方便的URL相关API

let url = Bundle.main.url(forResource: "apps", withExtension: "plist")

【讨论】:

以上是关于在 Swift 中从 Plist 加载 Url 图像的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 - 在 Safari 中从 JSON 打开 URL

在 TableViewCell Swift 中从 Firebase 加载图像

如何在 swift 4 中从图像选择器获取照片本地 url

在 iOS Swift 中从设备获取图像的 URL 路径

如何在具有单独位置 url 和资源 url 的 swift 中从服务器实时流式传输音频?

在 Swift 中从 AppDelegate 加载嵌入到 UINavigationController 的控制器