当前位置:K88软件开发文章中心编程语言APP编程Swift01 → 文章内容

Swift 类型转换

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-12 6:31:29

Any和AnyObject的类型转换Swift为不确定类型提供了两种特殊类型别名:AnyObject可以代表任何class类型的实例。Any可以表示任何类型,包括方法类型(function types)。注意:只有当你明确的需要它的行为和功能时才使用Any和AnyObject。在你的代码里使用你期望的明确的类型总是更好的。Any 实例class Subjects { var physics: String init(physics: String) { self.physics = physics }}class Chemistry: Subjects { var equations: String init(physics: String, equations: String) { self.equations = equations super.init(physics: physics) }}class Maths: Subjects { var formulae: String init(physics: String, formulae: String) { self.formulae = formulae super.init(physics: physics) }}let sa = [ Chemistry(physics: "固体物理", equations: "赫兹"), Maths(physics: "流体动力学", formulae: "千兆赫"), Chemistry(physics: "热物理学", equations: "分贝"), Maths(physics: "天体物理学", formulae: "兆赫"), Maths(physics: "微分方程", formulae: "余弦级数")]let samplechem = Chemistry(physics: "固体物理", equations: "赫兹")print("实例物理学是: \(samplechem.physics)")print("实例方程式: \(samplechem.equations)")let samplemaths = Maths(physics: "流体动力学", formulae: "千兆赫")print("实例物理学是: \(samplemaths.physics)")print("实例公式是: \(samplemaths.formulae)")var chemCount = 0var mathsCount = 0for item in sa { // 类型转换的条件形式 if let show = item as? Chemistry { print("化学主题是: '\(show.physics)', \(show.equations)") // 强制形式 } else if let example = item as? Maths { print("数学主题是: '\(example.physics)', \(example.formulae)") }}// 可以存储Any类型的数组 exampleanyvar exampleany = [Any]()exampleany.append(12)exampleany.append(3.14159)exampleany.append("Any 实例")exampleany.append(Chemistry(physics: "固体物理", equations: "兆赫"))for item2 in exampleany { switch item2 { case let someInt as Int: print("整型值为 \(someInt)") case let someDouble as Double where someDouble > 0: print("Pi 值为 \(someDouble)") case let someString as String: print("\(someString)") case let phy as Chemistry: print("主题 '\(phy.physics)', \(phy.equations)") default: print("None") }}以上程序执行输出结果为:实例物理学是: 固体物理实例方程式: 赫兹实例物理学是: 流体动力学实例公式是: 千兆赫化学主题是: '固体物理', 赫兹数学主题是: '流体动力学', 千兆赫化学主题是: '热物理学', 分贝数学主题是: '天体物理学', 兆赫数学主题是: '微分方程', 余弦级数整型值为 12Pi 值为 3.14159Any 实例主题 '固体物理', 兆赫AnyObject 实例class Subjects { var physics: String init(physics: String) { self.physics = physics }}class Chemistry: Subjects { var equations: String init(physics: String, equations: String) { self.equations = equations super.init(physics: physics) }}class Maths: Subjects { var formulae: String init(physics: String, formulae: String) { self.formulae = formulae super.init(physics: physics) }}// [AnyObject] 类型的数组let saprint: [AnyObject] = [ Chemistry(physics: "固体物理", equations: "赫兹"), Maths(physics: "流体动力学", formulae: "千兆赫"), Chemistry(physics: "热物理学", equations: "分贝"), Maths(physics: "天体物理学", formulae: "兆赫"), Maths(physics: "微分方程", formulae: "余弦级数")]let samplechem = Chemistry(physics: "固体物理", equations: "赫兹")print("实例物理学是: \(samplechem.physics)")print("实例方程式: \(samplechem.equations)")let samplemaths = Maths(physics: "流体动力学", formulae: "千兆赫")print("实例物理学是: \(samplemaths.physics)")print("实例公式是: \(samplemaths.formulae)")var chemCount = 0var mathsCount = 0for item in saprint { // 类型转换的条件形式 if let show = item as? Chemistry { print("化学主题是: '\(show.physics)', \(show.equations)") // 强制形式 } else if let example = item as? Maths { print("数学主题是: '\(example.physics)', \(example.formulae)") }}var exampleany = [Any]()exampleany.append(12)exampleany.append(3.14159)exampleany.append("Any 实例")exampleany.append(Chemistry(physics: "固体物理", equations: "兆赫"))for item2 in exampleany { switch item2 { case let someInt as Int: print("整型值为 \(someInt)") case let someDouble as Double where someDouble > 0: print("Pi 值为 \(someDouble)") case let someString as String: print("\(someString)") case let phy as Chemistry: print("主题 '\(phy.physics)', \(phy.equations)") default: print("None") }}以上程序执行输出结果为:实例物理学是: 固体物理实例方程式: 赫兹实例物理学是: 流体动力学实例公式是: 千兆赫化学主题是: '固体物理', 赫兹数学主题是: '流体动力学', 千兆赫化学主题是: '热物理学', 分贝数学主题是: '天体物理学', 兆赫数学主题是: '微分方程', 余弦级数整型值为 12Pi 值为 3.14159Any 实例主题 '固体物理', 兆赫 在一个switch语句的case中使用强制形式的类型转换操作符(as, 而不是 as?)来检查和转换到一个明确的类型。

上一页  [1] [2] 


Swift 类型转换