首页 文章

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

提问于
浏览
0
// 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 回答

  • 3

    arr.sorted 求值为 [Int] 的方法 . 如果你想要一个数组的排序副本调用该方法:

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

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

  • 0

    错误:函数'a'用作属性; add()来调用它

    Swift并不认为你的数组是一个函数 . Xcode告诉你, sorted 是一个方法,你最后必须用 () 调用它

    let a = arr.sorted()
    
  • 0

    我相信你想做的是以下几点:

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

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

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


    有关实例方法的更深入阅读,请查看here .

  • 1
    let a = arr.sorted
    

    为什么它认为“a”是一个功能?

    因为那就是它的本质 . sorted 是函数的名称 . 所以 a 现在是 sorted 函数 .

    你想要的是 a 是调用函数的结果 . 但是每个函数调用都涉及括号,例如 sorted() . 你没有括号 .

    简而言之,您的代码行谈论 sorted . 但它永远不会叫 sorted . 它只是重命名它 .

相关问题