Swift - 如何让UIView,UILabel和UIImageView之间类型互相转化

640 阅读1分钟

和上一篇博文一样,这个问题同样出在自定义tabbar里面,上一篇中判断是不是某类型拿到了UIView上放着的UIImageView和UILabel,要想对后者作修改肯定要变换类型,按照Object的尿性,网上各种变换,不一一列出,都没用,后来博主就在那里根据自己知道的知识来尝试,结果成了,看代码:

原Object-C代码:

UIImageView * imageView=(UIImageView *)[view.subviews objectAtIndex:0];
UILabel * label=(UILabel *)[view.subviews objectAtIndex:1];

这样的用法想必大家都不陌生,但是在Swift中怎么用呢,不要急,看下面:

let imageView = view.subviews[0] as! UIImageView
let label = view.subviews[1] as! UILabel

下面对于as?和as!来进行解释:

    首先它们都是用来转换类型的
    其次,as?提供了一种类似于容错的机制,如果可以转换成功就转换成后面对应的类型,否则为nilas!的‘!’在前面我们知道有强制解析的意思,在这里也是强制转换,在运行中可能会出现错误而系统崩溃的情况,不过我们一般用都是可以确定类型的,如果崩溃,记得检查类型
    还有就是Swift中对类型的匹配非常严格,一定要谨慎使用