【问题标题】:Swift -- Idiomatic equivalent to typeof in typealiasSwift -- 惯用的等价于 typealias 中的 typeof
【发布时间】:2015-01-11 03:54:47
【问题描述】:

在 Swift 中,我正在编写一个自定义的 SequenceType 和一个非常简单的 generate() 实现:

func generate() -> Generator {
    return elements.keys.generate()
}

但是,Generator 不是一个实际的类型——它只是指一个typealias,我必须在我的类型的其他地方手动指定它。

点开Dictionary相关的声明,elements.keys.generate()的类型好像很复杂,几乎是编译器的一个实现细节。我觉得定义我的类型别名的最简洁的方法是

typealias Generator = typeof(elements.keys.generate())

然而,Swift 显然没有typeof 指令。写我的typealias 有没有比使用以下丑陋且略显脆弱的代码更简洁的方法?

typealias Generator = LazyBidirectionalCollection<MapCollectionView<[Key : Value], Key>>.Generator

(是的,我知道 KeyValue 必须替换为我的特定字典的类型。但是,这些类型在这里并不重要)。

【问题讨论】:

    标签: swift protocols typeof idioms type-alias


    【解决方案1】:

    如果你正在编写一个自定义的SequenceType 来保存Element 类型的元素,你可以这样编写你的生成器:

     public func generate () -> AnyGenerator<Element> {
        var generator = objs.keys.generate()
        return AnyGenerator {
          return generator.next ()
        }
      }
    

    因为上面的代码是在SequenceType, 的范围内实现的,所以Element 类型是众所周知的。您不必从objs.keys.generate() 中“推断”类型,只需将其用作Element

    【讨论】:

    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多