繁体   English   中英

private func:调用中缺少参数#1的参数

[英]private func: Missing argument for parameter #1 in call

好吧,这是另一个“调用中的参数#1缺少参数”问题。 (似乎苹果可以更好地命名其错误:-p)

在我的课堂上,我正在调用一个私有函数libraryVisibility() ,并且在那一行中,我在编译时的Missing argument for parameter #1 in call错误中得到了Missing argument for parameter #1 in callMissing argument for parameter #1 in call 真的不明白为什么。

无论如何,这是代码:

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    var libraryState: Bool = libraryVisibility()

    func applicationDidFinishLaunching(aNotification: NSNotification) {
        …
    }

    private func libraryVisibility() -> Bool {
        …
        // dostuff and return boolean
        return true
    }
}

您不能在属性的默认初始化程序中调用实例函数

您可以使libraryVisibility()函数成为class函数:

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    var libraryState : Bool = AppDelegate.libraryVisibility()

     private class func libraryVisibility() -> Bool {
        let homeUrl = NSURL(string: NSHomeDirectory())
        let libraryUrl = NSURL(string: "Library", relativeToURL: homeUrl)

        return libraryUrl!.hidden
    }
}

或者,您可以将libraryState属性设置为lazy属性:

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    lazy var libraryState : Bool = self.libraryVisibility()

    private func libraryVisibility() -> Bool {
        let homeUrl = NSURL(string: NSHomeDirectory())
        let libraryUrl = NSURL(string: "Library", relativeToURL: homeUrl)

        return libraryUrl!.hidden
    }
}

然后,该属性将在您首次使用时进行初始化。

Mike Buss有一个很好的用法指南,介绍如何使用lazy变量。

好的,我已经解决了,但是不完全确定为什么这样做:

libraryState变量一个默认值,并在applicationDidFinishLaunching内部设置它似乎可以解决问题:

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    var libraryState: Bool = false

    func applicationDidFinishLaunching(aNotification: NSNotification) {

        libraryState = libraryVisibility()

    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM