首页 > 解决方案 > 如何强制将结构从超类型转换为新类型?

问题描述

从下面的代码中,我创建了 struct 类型的实例。

问题是我想创建包含任何带有supernoob协议的结构的数组。

但我不知道如何将其从祖先类型 ( supernoob) 转换为noob类型,我无法在不进行转换的情况下访问 ( var pro)。

在使用类时我可以很容易地转换它,但我不知道 struct 。

import UIKit

protocol supernoob{
  func superdoNoob()
  var supernub:String { get set }
}

struct noob: supernoob{
  var supernub: String
  func superdoNoob() {

  }
  var pro:String
}

struct spaceShip{
  var mynoob : supernoob
}

let flyAlien = spaceShip(mynoob: noob(supernub: "choopa", pro: "PO"))
let ufo = spaceShip(mynoob: noob(supernub: "choopa", pro: "PO"))

let array = [flyAlien,ufo]


ufo.mynoob as? noob

标签: iosswift

解决方案


只需通过以下方式检查是否可以进行演员表if let...

for item in array {
    if let noob = item.mynoob as? noob {
        print(noob.pro)
    }
}

推荐阅读