如何在Swift 4中解析部分链接?

奥瑟

我正在尝试通过API将图像显示到表单元格视图中。但是它在那里提供了部分链接,结果,我得到了NSURL连接错误代码-1002。

这是我的API链接:https : //api.opendota.com/api/heroStats

我正在尝试解析其中的“图标”:“ img”:“ /apps/dota2/images/heroes/antimage_full.png?”,“ icon”:“ /apps/dota2/images/heroes/antimage_icon.png”,

我的代码://生成imageview

if let imageURL = URL(string: heroes[indexPath.row].icon){
    print (imageURL)
    DispatchQueue.global().async {
        let data = try? Data (contentsOf: imageURL)
        if let data = data {
            let image = UIImage(data: data)
            DispatchQueue.main.async {
                cell.charIcon.image = image
            } //end of 2nd dispatch
        }//end of if
    }//end of 1st dispatch
}// end of imageURL

我怎么解决这个问题?有什么简单的方法可以快速获得4?

里奥·达布斯

您可以获取api链接的url组件,并使用图标“部分链接”来设置URL组件的path属性。之后,您只需要获取url组件的结果url:

let apiLink = "https://api.opendota.com/api/heroStats"
let apiURL = URL(string: apiLink)!
if var urlComponents = URLComponents(url: apiURL, resolvingAgainstBaseURL: false) {
    let iconString = "/apps/dota2/images/heroes/antimage_icon.png"
    urlComponents.path = iconString
    if let iconURL = urlComponents.url {
        print(iconURL.absoluteString)
    }
}

这将打印

https://api.opendota.com/apps/dota2/images/heroes/antimage_icon.png



您可以创建一个自定义方法以基于新的路径字符串返回新的URL,如下所示:

extension URL {
    var urlComponents: URLComponents? {
        return URLComponents(url: self, resolvingAgainstBaseURL: false)
    }
    func bySettingNew(path: String) -> URL? {
        guard var urlComponents = urlComponents else { return nil }
        urlComponents.path = path
        return urlComponents.url
    }
}

let apiLink = "https://api.opendota.com/api/heroStats"
let apiURL = URL(string: apiLink)!
let iconString = "/apps/dota2/images/heroes/antimage_icon.png"

if let iconURL = apiURL.bySettingNew(path: iconString) {
    print(iconURL.absoluteString)
}


您还可以将此帮助程序添加到项目中,以使您更轻松地异步将图像下载到图像视图中:

extension UIImageView {
    func downloaded(from url: URL, contentMode mode: UIView.ContentMode = .scaleAspectFit) {
        URLSession.shared.dataTask(with: url) { data, response, error in
            guard
                let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
                let mimeType = response?.mimeType, mimeType.hasPrefix("image"),
                let data = data, error == nil,
                let image = UIImage(data: data)
                else { return }
            DispatchQueue.main.async() { [weak self] in
                self?.contentMode = mode
                self?.image = image
            }
        }.resume()
    }
}

if let imageURL = apiURL.bySettingNew(path: heroes[indexPath.row].icon) {
    cell.charIcon.downloaded(from: imageURL)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Swift中解析XML附件

来自分类Dev

如何在Swift编程中解析NSMutableDictionary?

来自分类Dev

如何在Swift 2中解析JSON?

来自分类Dev

如何在C中解析链接的宏?

来自分类Dev

如何在ANTLR中解析部分日期?

来自分类Dev

如何在 Swift 4 中访问相机?

来自分类Dev

如何在 swift 4 中的 uitableView 中添加多个部分

来自分类Dev

如何在Swift中使用#解析URL?

来自分类Dev

如何在 MacOS (Swift) 上解析 iBeacon

来自分类Dev

如何从 Swift 4 中的描述解析数组?

来自分类Dev

如何在Swift中解析XML Web服务?

来自分类Dev

如何在Swift / iOS中解析Json并获取所需的值?

来自分类Dev

如何在Swift中解析为TextField iOS钥匙串?

来自分类Dev

如何在Swift中解析多级json结构?

来自分类Dev

如何在Swift / iOS中解析Json并获取所需的值?

来自分类Dev

如何在Swift中解析具有对象的JSON数组

来自分类Dev

如何在 Swift 中解析 JSON 数据并消除重复项?

来自分类Dev

如何在 swift 4.2 中解析下面的动态 JSON?

来自分类Dev

如何在 Swift 中解析这个 JSON 响应

来自分类Dev

如何在XSLT中获得链接的特定部分

来自分类Dev

如何在Swift中创建圆形按钮?

来自分类Dev

如何在Swift中隐藏特定警告

来自分类Dev

如何在Swift中调用deinit

来自分类Dev

如何在Swift中应用多个变换

来自分类Dev

如何在Swift中测试变量的类?

来自分类Dev

如何在Swift中准确使用MMWormhole?

来自分类Dev

如何在Swift中实现“共享按钮”

来自分类Dev

如何在Swift中制作日历视图

来自分类Dev

如何在Swift中销毁单身人士