我有Set
和Array
中的MyType
和Sequences
两个地方。
在这些地方,我需要过滤filter
,并且您会注意到两种Sequence
类型的Sequence
块是相同的。
有什么方法可以实现泛型filterFor
扩展,其中Set
方法将返回正确的类型(Array
或extension Set where Element: MyType {
func filterFor(valueToMatch:String) -> Set<MyType> {
return self.filter{
$0.myProperty.caseInsensitiveCompare(valueToMatch) == .orderedSame
}
}
}
extension Array where Element: MyType {
func filterFor(valueToMatch:String) -> [MyType] {
return self.filter{
$0.myProperty.caseInsensitiveCompare(valueToMatch) == .orderedSame
}
}
}
),具体取决于接收者?
import * as StepFunctions from "aws-sdk/clients/stepfunctions";
let sf = new StepFunctions({apiVersion: '2016-11-23'});
var request: GetExecutionHistoryInput = {
executionArn: executionArn,
maxResults: 1000,
reverseOrder: false
}
sf.getExecutionHistory(request).promise()
答案 0 :(得分:1)
不幸的是,没有。 Set
具有filter(_:)
的两个重载,具有以下类型:
func filter(_ isIncluded: (Self.Element) throws -> Bool) rethrows -> [Self.Element]
func filter(_ isIncluded: (Self.Element) throws -> Bool) rethrows -> Set<Self.Element>
第一个是满足Sequence
符合性要求的实现。后者只是Set
实现的一种方法,与任何协议无关。
没有通用的方法来引用Filter
的变体,该变体返回Array<Self.Element>
以外的任何内容。有一个Swift Evolution提案可以解决此问题(SE-0174 - Change filter to return an associated type)。它已被接受,但尚未实现。