【问题标题】:Access in array in specific indices访问特定索引中的数组
【发布时间】:2017-06-07 04:56:10
【问题描述】:

我正在尝试访问函数中的数组,据我了解,Swift 中没有 Arraylist,因此我尝试使用常规列表:

  func findNearsetPoints(pointsArray: [Point] , myPoint: Point )-> Array <Point>{

    var twoPoint = [Point]()
    var minDist1:Double = DBL_MAX;
    var minDist2:Double = DBL_MAX;
    var distance:Double = 0

    for element in pointsArray{
        distance = getDistanceBetweenTwoPoints(pointsArray[element], Point); //error 0
        if (distance < minDist1) {
            minDist1 = distance;
            twoPoint[1] = twoPoint[0];
            twoPoint[0] = pointsArray[element]; // error 1
        }
        else if (distance < minDist2) {
            minDist2 = distance;
            twoPoint[1] = pointsArray[element]; //error 1
        }
    }

    return twoPoint;
    }

    func getDistanceBetweenTwoPoints(point1:Point , point2:Point )->Double{
        return 5; //TODO
    }

错误0:

/Users/user/Desktop/proj/ViewController.swift:145:38:无法使用“ViewController.Point”类型的索引为“[ViewController.Point]”类型的值下标

错误 1:

/Users/user/Desktop/proj/ViewController.swift:149:38:无法使用“ViewController.Point”类型的索引为“[ViewController.Point]”类型的值下标

代码有什么问题? 谢谢!

【问题讨论】:

  • 你想使用pointsArray.enumerated() 来获取索引、值的元组
  • 没错,但对于他的用例,他不需要索引

标签: ios arrays swift xcode swift3


【解决方案1】:

您的 element 已经是 Point 而不是索引。

for element in pointsArray{
    distance = getDistanceBetweenTwoPoints(point1: element, point2: myPoint) // fix here
    if (distance < minDist1) {
        minDist1 = distance;
        twoPoint[1] = twoPoint[0];
        twoPoint[0] = element; // fix here
    }
    else if (distance < minDist2) {
        minDist2 = distance;
        twoPoint[1] = element; // fix here
    }
}

PS: 还可以查看this question "Sort array by calculated distance in Swift" 以更好地计算距离。只需按距离对数组进行排序,然后在排序后从数组中取出第一个。这样做更容易

【讨论】:

  • 帮助很大!现在它在第一行大喊大叫 /Users/user/Desktop/proj/PdacJobTest/ViewController.swift:137:47: Missing argument labels 'point1:point2' in call
  • 那你说得不对,应该是:let twopoints = findNearsetPoints(pointsArray: myPointsArray , myPoint: myPoint )
  • 这是有问题的行:distance = getDistanceBetweenTwoPoints(element, Point);
  • 当您添加标签时,您需要使用标签或用_ 标记您不需要标签的标签。调用它:distance = getDistanceBetweenTwoPoints(point1: element, point2: myPoint); 并将其更改为 myPoint 而不是类名
  • 请注意:您不需要在 swift 的行尾添加 ;
【解决方案2】:

您将 getDistanceBetweenTwoPoints 声明为采用命名参数。

使用当前声明,您需要使用以下语法调用它:

getDistanceBetweenTwoPoints(point1: aPoint, point2: anotherPoint)

如果你想在参数上不带标签的情况下调用它,那么你应该像这样重新定义它:

func getDistanceBetweenTwoPoints(
  _ point1:Point , 
  _ point2:Point )->Double{
        return 5; //TODO
    }

【讨论】:

    猜你喜欢
    • 2018-01-26
    • 2021-03-29
    • 1970-01-01
    • 2019-11-11
    • 2011-04-23
    • 1970-01-01
    • 2019-07-03
    • 2020-04-25
    • 1970-01-01
    相关资源
    最近更新 更多