你需要的大概不是 enumerated
Swift 标准库里最容易被滥用的就是 Sequence 的
使用 let array = ["a","b","c","d","e"] let arraySlice = array[2..<5] arraySlice[2] // => "c" arraySlice.enumerated().first // => (0,"c") arraySlice[0] // fatalError 我们的变量 你以为,你会获得与下面等价的代码 zip(array.indices,array) 但实际上你获取到的是这个 zip((0..<array.count),array) 如果你不是在使用 而且实际上你获取到的是一个 offset,而不是 index,使用 我见到 for (offset,model) in models.enumerated() { let viewController = viewControllers[offset] viewController.model = model } 虽然这段代码可以正常运作,但前提是 for (model,viewController) in zip(models,viewControllers) { viewController.model = model } 这段代码更加简洁,而且适用于所有 让我们看看另一个例子,这段代码给第一个 for (offset,imageView) in imageViews.enumerated() { if offset == 0 { imageView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor).isActive = true } else { let imageToAnchor = imageView[offset - 1] imageView.leadingAnchor.constraint(equalTo: imageToAnchor.trailingAnchor).isActive = true } } 这段示例代码也有同样的问题,我们想要成对的元素,但使用 首先,处理容器和第一个元素的约束: imageViews.first?.leadingAnchor.constraint(equalTo: containerView.leadingAnchor).isActive = true 接着,我们来把元素拼成一对: for (left,right) in zip(imageViews,imageViews.dropFirst()) { left.trailingAnchor.constraint(equalTo: right.leadingAnchor).isActive = true } 搞定,没有索引值,任何 Sequence 类型都适用,而且更加简洁。 (你也可以把这个拼对的操作封装进 extension 里,我会考虑命名为 这里介绍一下 for (offset,view) in views.enumerated() { view.frame.origin.y = offset * view.frame.height } 因为这里的 offset 是作为一个数字去使用, 使用的规则很简单:如果你是想用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c – 在具有外部链接的匿名命名空间中声明的实体示例
- (4.1.30)XML解析之DOM、SAX
- c# – 我该如何解决这个错误? – 委托’System.Action’不
- 正则表达式,终极使用!3个工具,搞定一切
- c – 多维std :: array
- IBInspectable / IBDesignable (只能用于Swift?)
- Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工
- c# – 如何使用InvariantCulture调用TypeConverter.Convert
- 用Drawable XML绘制带阴影效果的圆形按钮
- REACT Stateless Functional Component