!.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”是一个函数?
答案 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 +单击Xcode中的变量来检查变量的类型。要执行此功能,您需要使用()
来调用它。您在下一行中执行的操作。 a()
的输出是一个整数数组,您在其上调用last
属性。
如果您的arr
为空,则.last!
将导致错误/应用程序崩溃,因为您将展开nil
(空数组中没有最后一个元素)。这就是为什么在上面建议的代码中,我使用了nil-coalescing运算符??
,如果数组0
为空,它将保证函数将返回arr
。 >
要深入了解实例方法,请查看here。