// 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])
我试图从未排序的数组“arr”创建一个排序数组“a”,以解决HackerRank中的问题 . 但编译器给出以下错误:
main.swift:5:19:错误:函数'a'用作属性; add()调用它让最高= a.last!
^
()
为什么认为“a”是一种功能?
4 回答
arr.sorted
求值为[Int]
的方法 . 如果你想要一个数组的排序副本调用该方法:否则,编译器是正确的:
a
包含一个函数:sorted
方法 .Swift并不认为你的数组是一个函数 . Xcode告诉你,
sorted
是一个方法,你最后必须用()
调用它我相信你想做的是以下几点:
在您的代码中,
a
不是数组,它是具有以下签名() -> [Int]
的函数,因为arr.sorted
是实例方法 . 您可以通过Alt单击Xcode中的变量来检查变量的类型 . 要执行此功能,您需要使用()
来调用它 . 你在以下几行做了什么 .a()
的输出是一个整数数组,您在其上调用last
属性 .如果您的
arr
为空,.last!
将导致错误/应用程序崩溃,因为您要解包nil
(空数组中没有最后一个元素) . 这就是为什么在上面建议的代码中,我使用了nil-coalescing运算符??
,这可以保证如果数组arr
为空,函数将返回0
.有关实例方法的更深入阅读,请查看here .
因为那就是它的本质 .
sorted
是函数的名称 . 所以a
现在是sorted
函数 .你想要的是
a
是调用函数的结果 . 但是每个函数调用都涉及括号,例如sorted()
. 你没有括号 .简而言之,您的代码行谈论
sorted
. 但它永远不会叫sorted
. 它只是重命名它 .