gpt4 book ai didi

swift - ArrayLiteralConvertible 仅当元素类型是 Comparable 时?

转载 作者:行者123 更新时间:2023-11-28 06:47:51 29 4
gpt4 key购买 nike

我正在创建一个排序的集合类型,它通常从序列加闭包初始化(这样我就可以对任何类型的元素进行排序)。但是,在元素类型为 Comparable 的情况下,我也想将其设为 ArrayLiteralConvertible,但我不确定最好的方法是什么?

即当元素是Comparable时不需要闭包(只要升序没问题)。

仅当其元素类型为 Comparable 时,类型是否可能为 ArrayLiteralConvertible?如果不是,最好的选择是什么(先决条件失败?)

最佳答案

你可以这样做:

struct SortedCollection<T>: ArrayLiteralConvertible {
init<S: SequenceType where S.Generator.Element == T>(_ sequence: S, isOrderedBefore: (T, T) -> Bool) {
// ...
}

init(arrayLiteral elements: T...) {
fatalError("\(T.self) is not Comparable")
}
}

extension SortedCollection where T: Comparable {
init<S: SequenceType where S.Generator.Element == T>(_ sequence: S) {
self.init(sequence, isOrderedBefore: <)
}

init(arrayLiteral elements: T...) {
self.init(elements)
}
}

let foo = SortedCollection(arrayLiteral: 1, 2, 3) // Succeeds
let bar = SortedCollection(arrayLiteral: (1, 1), (2, 2), (3, 3)) // Fails

关于swift - ArrayLiteralConvertible 仅当元素类型是 Comparable 时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35796386/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com