函数参数,我可以通过设置或[Int]
问题描述:
基本上我想能够通过Set<Int>
或[Int]
或任何东西,至少,我可以迭代通过一组无序的Int
。函数参数,我可以通过设置<Int>或[Int]
我宁愿不必将[Int]
转换为Set<Int>
(反之亦然)。我想避免使功能需要不同的东西([Int]
或Set<Int>
),但做同样的事情,这是我现在正在做的事情。
我在许多地方使用此功能,并且呼叫者有时关心订单([Int]
),有时不关心(Set<Int>
)。但该功能不需要任何特定的顺序。
事情是这样的:
extension SequenceType where Generator.Element: Int { }
,但作为一个参数。
函数示例(如需要):
的Int
如上所述只是为了简化,我的例子是一些数据对象。
struct TextNumber {
let text: String
let number: Int
}
这里是我想要处理的数据的基本要素。
func sendUpTextNumberArray(arrayOfTextNumber: [TextNumber]) {
var convertedData = [[String:AnyObject]]()
for textNumber in arrayOfTextNumber {
convertedData.append(textNumber.convert())
}
Service.sendJSON(convertedData)
}
答
你可以做如下:
斯威夫特2
let setOfIntegers = Set([1,2,3])
let arrayOfIntegers = [1,2,3]
func sum<T: SequenceType where T.Generator.Element == Int>(integers: T) -> T.Generator.Element {
return integers.reduce(0, combine: +)
}
sum(arrayOfIntegers) // 6
sum(setOfIntegers) // 6
斯威夫特3
func sum<T: Sequence where T.Iterator.Element == Int>(_ integers: T) -> T.Iterator.Element {
return integers.reduce(0, combine: +)
}
sum(arrayOfIntegers) // 6
sum(setOfIntegers) // 6
+0
太棒了!我认为这是可能的,只是想不出正确的做法。谢谢! – KKendall
你能提供什么该功能将与做榜样函数参数本身? –
我想你将不得不为实际功能选择一个(我会建议'[Int]'),然后创建第二个函数来包装第一个函数:'firstFunction(Array(input))' – Paulw11
@Dan,I只是增加了一个例子。利奥达布斯给出了一个很好的答案,可以满足我的需求,但我也愿意接受其他任何方面的答案。谢谢! – KKendall