swift as as? as!
时间: 2023-08-21 12:03:00 浏览: 46
在Swift中,`as`、`as?`和`as!`是用于类型转换的关键字。
- `as` 用于将一个实例转换为其父类或协议类型,或者将一个父类或协议类型转换为其子类类型。
- `as?` 用于可选型的类型转换。如果转换成功,返回一个可选值,如果转换失败,返回 `nil`。
- `as!` 用于强制类型转换。如果转换失败,会触发运行时错误。
下面是一些示例:
1. 父类到子类的类型转换:
```swift
class Animal { }
class Dog: Animal { }
let animal: Animal = Dog()
let dog = animal as Dog
```
2. 子类到父类的类型转换:
```swift
class Animal { }
class Dog: Animal { }
let dog = Dog()
let animal = dog as Animal
```
3. 类型转换失败时使用 `as?`:
```swift
class Animal { }
class Dog: Animal { }
let animal: Animal = Animal()
let dog = animal as? Dog
if dog != nil {
// 转换成功
} else {
// 转换失败
}
```
4. 类型转换失败时使用 `as!`(会触发运行时错误):
```swift
class Animal { }
class Dog: Animal { }
let animal: Animal = Animal()
let dog = animal as! Dog // 这里会触发运行时错误
```
请注意,在进行强制类型转换时,如果类型不匹配,会触发运行时错误。因此,在使用 `as!` 进行类型转换时,请确保类型转换是安全的,以避免运行时错误的发生。