Swift为什么认为我的数组是一个函数?

时间:2018-12-08 19:58:10

标签: swift

!.isvisible()

我试图从未排序的数组“ arr”创建一个排序的数组“ a”,以解决HackerRank的问题。但是编译器给出以下错误:

  

main.swift:5:19:错误:函数'a'被用作属性;添加   叫它

// Complete the miniMaxSum function below.
func birthdayCakeCandles(arr: [Int]) -> Int {
    let a = arr.sorted
    let highest = a().last!
    return 0
}

birthdayCakeCandles(arr: [1, 7, 3, 12, 5])

为什么会认为“ a”是一个函数?

4 个答案:

答案 0 :(得分:3)

  错误:函数'a'被用作属性;添加()即可调用

Swift认为您的数组不是一个函数。 Xcode只是告诉您,sorted是一种方法,您必须在末尾用()进行调用

let a = arr.sorted()

答案 1 :(得分:1)

let a = arr.sorted
  

为什么会认为“ a”是一个函数?

因为这就是事实。 sorted是函数的名称。因此a现在是sorted函数。

您想要的是a是调用函数的结果。但是每个函数调用都包含括号,例如sorted()。您没有括号。

简而言之,您的代码行谈论关于 sorted。但是它从不会调用 sorted。它只是重命名它。

答案 2 :(得分:0)

arr.sorted的计算方法为[Int]。如果要数组的排序副本,请调用该方法:

func birthdayCakeCandles(arr: [Int]) -> Int {
    let a = arr.sorted()
    let highest = a.last!
    return 0
}

否则,编译器是正确的:a包含一个函数:sorted方法。

答案 3 :(得分:0)

我相信您想要做的是以下事情:

func birthdayCakeCandles(arr: [Int]) -> Int {
    return arr.max() ?? 0
}

在您的代码中,a不是数组,它是具有以下签名() -> [Int]的函数,因为arr.sorted是实例方法。您可以通过 Alt +单击Xco​​de中的变量来检查变量的类型。要执行此功能,您需要使用()来调用它。您在下一行中执行的操作。 a()的输出是一个整数数组,您在其上调用last属性。

如果您的arr为空,则.last!将导致错误/应用程序崩溃,因为您将展开nil(空数组中没有最后一个元素)。这就是为什么在上面建议的代码中,我使用了nil-coalescing运算符??,如果数组0为空,它将保证函数将返回arr。 >


要深入了解实例方法,请查看here