Swift—— is和 as、 as? 、 as! 区别

is用来判断是否为某种类型 ,as用来做强制类型转换

一、 is 判断类型

protocol Runnable {func run() }
class Persion {}
class Student:Persion,Runnable{
    func run() {
        print("跑起来")
    }
    func study(){
        print("study")
    }
}

//判断类型
var stu: Any = 10
print(stu is Int)//true
stu = "jack"
print(stu is String)//true
stu = Student()
print(stu is Persion)//true
print(stu is Student)//true
print(stu is Runnable)//true
例2
 let btn = UIButton(type: .custom)
 print((btn is UIButton)) //true
 print((btn is UIControl))//true
 print((btn is UIView))//true
 print((btn is UILabel))//false

 

二、as强制转换

protocol Runnable {func run() }
class Persion {}
class Student:Persion,Runnable{
    func run() {
        print("跑起来")
    }
    func study(){
        print("study")
    }
}

var stu:Any = 10
(stu as? Student)?.study() // 没有调用
(stu as! Student).study() // 闪退
stu = Student()
(stu as? Student)?.study() //调用
(stu as! Student).study() //调用
(stu as? Runnable)?.run() //调用

 

### 回答1: `as` 是强制类型转换运算符。使用它可以将一个对象的类型转换为另一种类型。如果类型转换失败,会触发一个运行时错误。 `as!` 是强制类型转换运算符。使用它可以将一个对象的类型转换为另一种类型。如果类型转换失败,会触发一个运行时错误。它与 as 类似,但是它更加强烈地说明了类型转换是成功的。 `as?` 是可选类型转换运算符。使用它可以将一个对象的类型转换为另一种类型。如果类型转换失败,则返回 nil。 如下是一个简单的例子 ``` swift let num: Any = 5 let intNum = num as? Int print(intNum) // Optional(5) ``` 如果这里 `as` 或 `as!` 那结果就会是5,而不是Optional(5) ### 回答2: 在Swift语言中,as、as!和as?是用于类型转换的关键字。 as用于向下转型。它可以将一个具有指定类型的实例转换为另一个类型。如果转换成功,则返回一个可选型的结果;如果转换失败,则会导致程序运行时错误。所以,我们在使用as进行类型转换时,需要在转换之前使用条件判断来确保转换的安全性。 as!用于强制向下转型,它与as的区别在于,如果转换失败,会导致程序崩溃。因此,在使用as!进行类型转换时,要确保转换一定会成功,否则会导致运行时错误。 as?是可选型向下转型的关键字。它尝试将一个具有指定类型的实例转换为另一个类型,如果转换成功,则返回一个可选型的结果;如果转换失败,则返回nil。所以,在使用as?进行类型转换时,我们需要对转换结果进行判断,以处理转换成功和转换失败的情况。 总结:as用于向下转型,可能会导致运行时错误;as!表示强制向下转型,如果转换失败会导致程序崩溃;as?表示可选型向下转型,如果转换失败会返回nil。在使用这些关键字进行类型转换时,需要明确转换的安全性。 ### 回答3: 在Swift中,as、as!和as?是用于类型转换的关键字。 as是一种安全的类型转换方式,用于将一个对象转换为指定的类型。如果转换成功,则返回转换后的对象;如果转换失败,则返回nil。 as!是一种强制类型转换方式,用于将一个对象强制转换为指定的类型。它假设被转换的对象一定是指定的类型,如果转换失败,则会引发运行时错误。 as?是一种可选类型的类型转换方式,用于将一个对象转换为指定的可选类型。如果转换成功,则返回一个可选类型对象,其值为转换后的对象;如果转换失败,则返回nil。 这些类型转换关键字在Swift中非常有用,可以帮助我们在处理不同类型的对象时进行安全、灵活的转换操作。需要根据转换的需求和对象的类型选择合适的类型转换方式,以确保代码的正确性和安全性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值