swift 通俗易懂 之 as as! ! ? _

2019-12-31  本文已影响0人  _oeo___

swift 的 as as! ! ? _ 总结

? 问号

用法:

class Dog: Animal {
    var name:String?
    var age:Int?
}
let d:Dog = Dog()
d.name = "leo"
let v = d.name?.lowercased().count
print(v)   
# print: Optional(3)

! 感叹号

_ 下划线

在方法声明中使用代表不用使用参数名成接受参数,代表默认参数


func hello_default(_ default1:String){
    print(default1)
}

func hello_no_default(noDefault:String){
    print(noDefault)
}

hello_default("正确")

hello_no_default("错误")
hello_no_default(noDefault: "正确")

as & as!

as 是派生类到基类转换(cat 属于Animal),这样转换很自然,不要强制转换

class Animal{}
class Dog:Animal{}
let  cat = Dog()
let dog = cat as Animal

as!

这个是类型强制转换,什么时候需要强制转换呢,就是类型不明确的时候.派生类向基类转换, 如下面 animal 其实可以是Cat也可以是Dog,那么是哪个呢! 其实是需要判断的,这个就需要强制转换, 如果转换失败会报runtime运行错误 Exception

class Animal{}
class Cat:Animal{}
class Dog: Animal {

}
let animal:Animal = Cat()
let cat = animal as! Dog    # throw 异常
let cat = animal as? Dog    # cat = nil

as?

和上面as!相似 也是向.派生类向基类转换,但是不同的是,如果转换失败他不会报异常Exception 而是会返回 nil.

let animal:Animal = Cat()
if let cat = animal as? Cat{
   print("这里有猫")
}else{
  print("这里没有猫")
}

as - 总结

name 方向 转换成功 转换失败
as 派生->基类 基类对象 -
as! 基类->派生(Upcast) 派生类对象 throw Exception
as? 基类->派生(Downcast) optional(派生类对象) nil
上一篇 下一篇

猜你喜欢

热点阅读