ios - 我可以传入 Set<Int> 或 [Int] 的函数参数

标签 ios swift protocols

基本上我希望能够传入 Set<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)
}

最佳答案

您可以按如下方式进行:

swift 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

swift 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

关于ios - 我可以传入 Set<Int> 或 [Int] 的函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38624895/

相关文章:

ios - 在 UICollectionView 中禁用 UIAttachmnetBehavior 的垂直移动

ios - dequeueReusableCellWithIdentifier 一直返回 nil

ios - CloudKit订阅错误: apsd[81] <Warning>: Silent Push: Deny app not available

ios - SFSpeechRecognizer 多种语言

Android/iOS - 自定义 URI/协议(protocol)处理

http - HTTP 的源端口是如何确定的? NAT 中是否存在冲突?

ios - 自动添加的 URL 末尾的 AFNetworking 斜杠

ios - 优化 iOS 应用程序的迭代循环

iOS:CoreGraphics - 使用 CGContextClip 和 lineCap = .Round 剪切弧

ios - 让 Swift 类同时充当 UIViewController 子类和 UITableViewDelegate