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))
}