【问题标题】:Convert Array of arrays to segments in swift快速将数组数组转换为段
【发布时间】:2017-05-12 17:13:00
【问题描述】:

我有数组[["PT"], ["GE", "DE", "PL", "BY"], ["CZ", "US"]],我想在我以编程方式创建的UISegmentedControl 中使用它:

 for i in 0..<array.count {
            mySegmentControl.insertSegment(withTitle: array[i], at: i, animated: false)
        }

我看到错误:

无法将类型“[String]”的值转换为预期的参数类型“String?”

是的,但我需要 PT 位于第一段标题,GE..BY 位于第二段,以此类推。

【问题讨论】:

  • 段标题是字符串,而不是数组。你期待什么结果?第二段的标题应该是什么?
  • @MartinR 我知道,但是如何做到这一点PT,因为 String 将在第一段,GE..BY 在第二段等等。生成所以将段计数为主数组中的数组计数

标签: ios arrays swift swift3 uisegmentedcontrol


【解决方案1】:

数组的类型是什么?是不是[[String]],那你就可以这样(操场代码):

extension UISegmentedControl {

    func updateTitle(array titles: [[String]]) {

        removeAllSegments()
        for t in titles {
            let title = t.joined(separator: ", ")
            insertSegment(withTitle: title, at: numberOfSegments, animated: true)
        }

    }
}

let control = UISegmentedControl()
control.updateTitle(array: [["PT"], ["GE", "DE", "PL", "BY"], ["CZ", "US"]])
control.titleForSegment(at: 1)

【讨论】:

  • 谢谢,但我需要 PT 在第一段,GE..BY 在第二段等等..所以,生成所以计数段作为主数组中的数组计数
  • 然后@Nirav D 回答了你的新问题。
【解决方案2】:

如果您希望 PT 出现在第一段,GE..BY 在第二段等等。所以试试这样。

for (index,subArray) in array.enumerated() {
     if subArray.count > 1 {
          let title = subArray.first! + ".." + subArray.last!
          mySegmentControl.insertSegment(withTitle: title, at: index, animated: false)
     }
     else if subArray.count > 0 {
          let title = subArray.first!
          mySegmentControl.insertSegment(withTitle: title, at: index, animated: false)
     }
}

【讨论】:

  • @VadimNikolaev 欢迎朋友 :)
【解决方案3】:

另一种方法是将数组映射到标题,如下所示:

let titles: [String] = array.flatMap {
    guard let first = $0.first else { return nil }
    return first + ($0.count > 1 ? (".." + $0.last!) : "")
}

对于let array = [["PT"], ["GE", "DE", "PL", "BY"], [], ["CZ", "US"]] 将产生["PT", "GE..BY", "CZ..US"]

然后将其插入您的UISegmentedControl:

titles.enumerated().forEach {
    mySegmentControl.insertSegment(withTitle: $0.element, at: $0.offset, animated: false)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 2016-07-23
    • 1970-01-01
    • 2020-05-06
    相关资源
    最近更新 更多