我在Array实例上有一个扩展,可以像这样在索引上循环:
extension Array {
func fun (_ iterator: (Int, Element) -> Void) -> Void {
for (key,value) in self.enumerated() {
iterator(key,value)
}
}
}
现在,我想称呼它为:
[.leading,.trailing,.bottom,.top].fun {
(index, element) in
var c : Int = index % 2 == 0 ? 20 : -20 // THAT LINE
NSLayoutConstraint(item: subView, attribute: element, relatedBy: .equal, toItem: self.view, attribute: element , multiplier: 1, constant: c ).isActive = true
}
但是,这会引发一个错误:表达式类型不明确,没有更多上下文。
当我删除该行(代码段中的“该行”)时,它会起作用。当我添加此代码或任何其他代码时,甚至添加了一些变量声明-它给了我相同的异常。
此错误仅出现在Xcode中,在终端中起作用:
🐄 swift
Welcome to Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1). Type :help for assistance.
1>
2>
3> extension Array {
4. func fun (_ iterator: (Int, Element) -> Void) -> Void {
5. for (key,value) in self.enumerated() {
6. iterator(key,value)
7. }
8. }
9. }
10> [0,1,2,3,4].fun {
11. (index, element) in
12.
13. var c : Int = index % 2 == 0 ? 20 : -20 // THAT LINE
14. print(c)
15. }
20
-20
20
-20
20
最佳答案
似乎是数组元素类型的问题。
尝试使用[NSLayoutAttribute.leading, NSLayoutAttribute.trailing, NSLayoutAttribute.bottom, NSLayoutAttribute.top]
代替[.leading,.trailing,.bottom,.top]
。
和constant: CGFloat(c)
而不是constant: c
。