在数组中选择中间值 - Swift

时间:2018-05-09 08:26:12

标签: arrays swift uipageviewcontroller

我正在尝试确保中间值列表是构建应用程序时看到的第一个视图。 Xcode提供OffsetRange,但我无法锻炼如何选择中间值。

RowOffset

4 个答案:

答案 0 :(得分:1)

firstlast类似,您可以使用返回可选Array的计算middle属性扩展Element

extension Array {

    var middle: Element? {
        guard count != 0 else { return nil }

        let middleIndex = (count > 1 ? count - 1 : count) / 2
        return self[middleIndex]
    }

}

用法示例:

if let middleView = viewList.middle {
    //... Do something
}

我希望您注意,如果数组只有1个元素,firstlast可以返回相同的元素。

类似地,尽管此扩展适用于任何数组长度,但它可以返回相同的元素:

  • firstmiddle& last如果您的数组只有1个元素
  • middle& last如果您的数组只有2个元素

答案 1 :(得分:1)

由于viewList被声明为[UIViewController](而不是选项 - [UIViewController?]),因此您不必使用"可选绑定" (检查元素是否为nil)因为必须存在。你应该做的是检查范围内的索引(确保索引在范围内)。

从逻辑上讲(显然),如果您非常确定viewList 总是有3个元素,则无需进行任何检查,只需:

let middleViewController = viewList[1]

如果viewList中的元素数量未确定且您的目标是获取中间元素,则只需将其设为:

let middleViewController = viewList[(viewList.count - 1) / 2]

请注意,firstlast是可选项,在您的情况下,无需使用选项...

答案 2 :(得分:0)

您的viewListUIViewController类型的数组。并且firstlast仅表示其第0个和最后一个索引。像:

  

viewList.firstviewList[0]

相同      

viewList.lastviewList[viewList.count - 1]

相同      

只有使用这些内容的区别在于,如果您使用viewList.first它将返回nil如果您的数组为空,但如果您将在空数组上使用viewList[0],那么您的应用将是崩溃错误索引越界...

因此,您可以使用索引轻松访问中间值:

if viewList.count > 1 {
    let middleView = viewList[1]
    self.setViewControllers([middleView], direction: .forward, animated: true, completion: nil)
}

如果您不确定viewList.count是3还是更多,那么:

    let middleIndex = (viewList.count - 1) / 2
    let middleView = viewList[middleIndex]

答案 3 :(得分:0)

可以为Array添加扩展名来完成此操作:

extension Array {

    var middleIndex: Int {
        return (self.isEmpty ? self.startIndex : self.count - 1) / 2
    }
}
let myArray: [String] = ["Hello", "World", "!"]
print("myArray.middleIndex: \(myArray.middleIndex)") // prints 1