通用函数中的Swift枚举类型包装器

时间:2016-01-10 22:08:54

标签: swift generics enums

我想用枚举包装异步函数响应的结果:

enum Result<T> {
  case Success(T)
  case Failure(Error)
} 

主要思想是使用switch case .Success(let rep) case .Failure (let err) etc.确定异步功能是成功还是失败。

问题是我需要/想要将结果枚举放在Channel<T>上。 做点什么

let ch = Chan<Result>()  // define a channel on which I can put a 'result'
// for example when fetching a user

if(success) put(ch, .Success(user)) //put .Success with user inside on the channel
else put(ch, .Error(error))

问题是Swift不允许我将Result - 枚举放在Chan<T>上。 是否可以将在.Success a&#39; -generic struct / class中包含的Enum值包含在内?例如,同一个枚举可能包含一个错误的故障。

有没有办法用枚举值类型包装泛型而不违反Swift类型系统的大法则?

PS:
以上是伪代码,put是运算符func <~<T>(l: Chan<T>, r: T)的别名, Chan来自github.com/tidwall/Safe/blob/master/Source/chan.swift

0 个答案:

没有答案