ios - 在运行时定义类型别名

标签 ios objective-c swift generics type-alias

有没有办法在运行时定义类型别名?

在我的测试代码中我有:

typealias classType = A
switch i {
case 0: typealias classType = B
case 1: typealias classType = C
case 2: typealias classType = D
default:typealias classType = E
}

但 classType 仍然是 A“类型”..

艺术现状:

class E {}
class A: E {}
class B: E {}
class C: E {}
class D: E {}

class Service {
  func retrieve<T>(completion: (response: ResponseItems<T>?, error: NSError?) -> Void) {}
}

因此,在代码的通用部分:

let service = Service()

typealias classType = A
switch i {
case 0: typealias classType = B
case 1: typealias classType = C
case 2: typealias classType = D
default:typealias classType = E
}
service.retrieve{ (response: ResponseItems<classType>?, error) -> Void in

}

这有效,但总是使用 A 类型调用。

最佳答案

typealias 在运行时不可用。 但这也许有帮助,它是通过枚举和协议(protocol)实现的。 在 Playground 上试试

enum ClassType {
  case ClassAType, ClassBType, ClassCType
}

protocol ResponseItem {
  var getType : ClassType { get }
}

class ClassA: ResponseItem
{
   var getType : ClassType { return .ClassAType }
}

class ClassB: ResponseItem
{
  var getType : ClassType { return .ClassBType }
}

class ClassC: ResponseItem
{
  var getType : ClassType { return .ClassCType }
}

func retrieve( response : ((ResponseItem?, NSError?) -> Void))
{
  let aType = ClassB()
  response(aType, nil)
}

retrieve{ (response: ResponseItem?, error) -> Void in
  if let classType = response {
    switch classType.getType {
    case .ClassAType:
      println("ClassA")
    case .ClassBType:
      println("ClassB")
    case .ClassCType:
      println("ClassC")
    }
  }
}

关于ios - 在运行时定义类型别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31265008/

相关文章:

html - 允许用户在 Objective C 中创建和查看 HTML 文件?

ios - 我什么时候应该重新加载数据()?

c++ - 在 MAC OS X 中从 C++ dylib 调用 cocoa/obj-c 方法

objective-c - 如何解析不带引号的 JSON 及其 KEY 字符串?

ios - 在选项卡栏中实现 iOS 角标(Badge)通知的最佳方式

android - FLEX - ZXing - Android、移动 - 条码读取器

ios - 带有 LiveFrost LFGlassView 的 UIView 动画

iphone - 更改 rootViewController 与当前 ModalViewController

ios - Firebase:从嵌套的 Childs 中检索信息 (Swift 3)

swift - MKPolygon Swift 没有出现