iOS 11.x Swift 4.0
这无法编译,因为您似乎无法用emem下标数组?我可以使用一种可以使用的类型吗?
enum axis:Int {
case x = 0
case y = 1
}
var cords = [[10,21],[23,11],[42,12],[31,76]]
var smallestCord:Int = Int.max
var smallestSet:[Int] = []
for cord in cords {
if cord[axis.x] < smallestCord {
smallestCord = cord[axis.x]
smallestSet = cord
}
}
print("\(smallestCord) \(smallestSet)")
它可以与像这样的静态变量一起工作吗?但是我可以进行枚举工作吗?
private struct axis {
static let x = 0
static let y = 1
}
答案 0 :(得分:2)
您可以通过在Array
上添加扩展名来实现,但这是“您可以做什么”而不是“您应该做什么”的一种情况。
extension Array {
subscript(index: axis) -> Element {
return self[index.rawValue]
}
}
您应该做的是定义适当的数据结构来封装数据:
struct Point {
var x: Int
var y: Int
// For when you need to convert it to array to pass into other functions
func toArray() -> [Int] {
return [x, y]
}
}
let cords = [
Point(x: 10, y: 21),
Point(x: 23, y: 11),
Point(x: 42, y: 12),
Point(x: 31, y: 76)
]
let smallestSet = cords.min(by: { $0.x < $1.x })!
let smallestCord = smallestSet.x
print("\(smallestCord) \(smallestSet.toArray())")
答案 1 :(得分:1)
您应该使用rawValue
而不是枚举实例本身,例如使用cord[axis.x.rawValue]
而不是cord[axis.x]
。进一步了解here。