swift那点事儿之optional(可选绑定)

本文介绍了如何使用Swift语言从URL加载图像,并通过多种条件判断实现特定功能,如验证图片格式及路径长度。

URL参照:https://qiita.com/hachinobu/items/2ecfc5999327fff20837#はじめに

  • 例题一:有一张图片从String类型转化为UIImage,用UIImageView去表示

処理流程

1.URLdeString型转化为NSURL型
2.NSURL型`转化为NSData型
3.NSData型转化为UIImage型之后用UIImageView展示

1,2,3每次的转化处理都用到Optional型的返回値去做処理

let urlString = "https://pbs.twimg.com/profile_images/3734255592/0b417aa61da0196cfed35889928ee895.png"

if let url = NSURL(string: urlString), data = NSData(contentsOfURL: url), image = UIImage(data: data) {
    UIImageView(image: image)
}

如果NSURL(string: urlString)或者NSData(contentsOfURL: url)不能被非Optional型去处理的場合、那么処理便会结束,不会进入if代码块内

上记代码 于下记代码等同

if let url = NSURL(string: urlString) {
    if let data = NSData(contentsOfURL: url) {
        if let image = UIImage(data: data) {
            UIImageView(image: image)
        }
    }
}

・例题二:上述例题加一个条件,URL的文件类型只能是PNG的图片才能显示

let urlString = "https://pbs.twimg.com/profile_images/3734255592/0b417aa61da0196cfed35889928ee895.png"
//urlString先通过optional型处理转化为NSURL之后在where中确认是否为png图片
if let url = NSURL(string: urlString) where url.pathExtension == "png", let data = NSData(contentsOfURL: url), image = UIImage(data: data) {
    UIImageView(image: image)
}

urlString先通过optional型处理转化为NSURL之后在where中确认是否为png图片

 

非optional型的处理若直接放入if中会error:

Initializer for conditional binding must have Optional type, not [SubSequence]

解决方式 明确返回的类型或者用Optional.Some()强制为optional型去做处理

・例题三

需求: 如果图片URL用“/”进行划分后最后一个元素长度小于5的不显示。

let url: String? = "http://qiita.com/hachinobu/items/aedac203f42b215e6df4"
if let unwrapUrl = url, elements = unwrapUrl.characters.split("/"), last = elements.last where last.count > 5 {
    print(String(last))
}

error发生:Initializer for conditional binding must have Optional type, not [SubSequence]

解决方式:1.明确返回的类型

let url: String? = "http://qiita.com/hachinobu/items/aedac203f42b215e6df4"
if let unwrapUrl = url, elements: [String.CharacterView] = unwrapUrl.characters.split("/"), last = elements.last where last.count > 5 {
    print(String(last)) //aedac203f42b215e6df4
}

解决方式:2.用Optional.Some()强制为optional型去做处理

let url: String? = "http://qiita.com/hachinobu/items/aedac203f42b215e6df4"
if let unwrapUrl = url, elements = Optional.Some(unwrapUrl.characters.split("/")), last = elements.last where last.count > 5 {
    print(String(last))
}

 

【源码免费下载链接】:https://renmaiwang.cn/s/anwse 在探索使用vue-cli和HBuilderx进行应用程序打包的过程中,我们可能会遇到许多常见的问题和陷阱。根据文件提供的内容,我们可以梳理出以下几关键知识:1. 微信授权登录问题:在使用vue-cli构建的HBuilderx应用中,微信授权登录时可能会遇到code:-2或code:-100的错误提示。这些问题通常指向几个方面:appid和appsecret必须针对移动应用设置,而不是网页应用;微信登录和分享功能在自定义基座环境中可能不可用;再次,开发者账号配置的应用签名应该是经过md5加密后的值,而不是原字符串。2. 生产环境配置问题:生产环境下,proxyTable可能不生效,从而导致接口访问出现500错误。解决这个问题有两条途径:一是使用网络地址作为入口文件,并确保入口文件和接口处于同一域名下;二是推荐在config/prod.env和config/dev.env中添加API_ROOT,并在main.js里通过axios设置正确的baseUrl,以解决接口路径问题。3. 资源路径问题:在打包过程中,背景图片使用相对路径可能导致测试时图片不显示。为避免这种情况,需要确保css文件中背景图片的路径设置正确,并调整config/index.js中关于资源路径的配置。4. 微博分享功能问题:微博分享功能在某些情况下可能会闪退,这是由于Dcloud的一个已知问题导致的。授权失败的原因可能有两个:网络问题或未安装新浪微博应用。在进行授权时需要加入判断逻辑,根据授权失败的具体情况给出提示。5. iPhoneX适配问题:在iPhoneX上由于底部安全区的存在,可能会导致导航栏不能正确地显示在最底部。为解决这一问题,在index.html的<meta>标签中添加viewport-fit=cover,以适
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值