前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >swift 类型转换

swift 类型转换

作者头像
xy_ss
发布2023-11-22 09:14:52
1490
发布2023-11-22 09:14:52
举报
文章被收录于专栏:浮躁的喧嚣

可以判断实例的类型。也可以用于检测实例类型是否属于其父类或者子类的实例

类型转换使用 is、as、as? 、as!

转换没有真的改变实例或它的值。根本的实例保持不变;只是简单地把它作为它被转换成的类型来使用

代码语言:javascript
复制
class ClassA {
    var name:String
    init(name:String) {
        self.name = name
    }
}

class ClassB: ClassA {
    var describe:String
    init(name: String, describe:String) {
        self.describe = describe
        super.init(name: name)
    }
}

class ClassC: ClassA {
    var type:String
    init(name:String, type:String) {
        self.type = type
        super.init(name: name)
        
    }
}

let arr = [ClassB.init(name: "B0", describe: "B0 describe"),
                   ClassC.init(name: "C0", type: "C0 type"),
                   ClassB.init(name: "B1", describe: "B1 describe"),
                   ClassC.init(name: "C1", type: "C1 type"),
                   ClassC.init(name: "C2", type: "C2 type")]
  • is :检查一个实例是否属于某类型
代码语言:javascript
复制
let v = arr[1]
if v is ClassB{
    print("ClassB")
}else{
    print("other")
}
//ClassB
  • ** as**: 子类转父类(向上转型)
代码语言:javascript
复制
let v0 = arr[0] as ClassA
print(v0) //ClassB
  • as?:当你不确定父类转子类(向下转型)可以成功时,用类型转换的条件形式as?,返回一个可选值,若下转是不可能的,可选值将是nil
代码语言:javascript
复制
let v1 = arr[0] as? ClassC
print(v1) // nil
  • as!:可以确定向下转型一定会成功时,才使用强制形式as!,向下转型为一个不正确的类型时,强制形式的类型转换会触发一个运行时错误
代码语言:javascript
复制
let v2 = arr[0] as! ClassB
print(v2) //ClassB

Any 和 AnyObject 的类型转换

  • Any 可以表示任何类型,包括函数类型
  • AnyObject 可以表示任何类类型的实例 示例
代码语言:javascript
复制
var things = [Any]()
things.append(0)
things.append(0.0)
things.append(42)
things.append(3.14159)
things.append("hello")
things.append((3.0, 5.0))
things.append({ (name: String) -> String in "Hello, \(name)" })

如果你确实想使用Any类型来承载可选值,你可以使用as操作符显式转换为Any

代码语言:javascript
复制
var things = [Any]()
let value:Int? = 3
things.append(value)        //有警告
things.append(value as Any) //无警告
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 可以判断实例的类型。也可以用于检测实例类型是否属于其父类或者子类的实例
  • 类型转换使用 is、as、as? 、as!
  • 转换没有真的改变实例或它的值。根本的实例保持不变;只是简单地把它作为它被转换成的类型来使用
  • Any 和 AnyObject 的类型转换
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档