【问题标题】:Swift Extension, Missing Argument For Parameter #1 In CallSwift 扩展,缺少参数 #1 调用中的参数
【发布时间】:2015-03-16 19:27:18
【问题描述】:

我会尽量保持简短。

我有一个 NSDate 扩展,我在整个应用程序中用于许多事情,但我遇到了一个问题(奇怪的是)一个非常简单的功能。

扩展的相关部分是:

import Foundation

extension NSDate {

    func nineAMMonday() -> NSDate {
        let greg = NSCalendar.currentCalendar()
        let componenets = NSDateComponents()
        componenets.weekday = 2
        componenets.hour = 9
        componenets.minute = 0
        componenets.second = 0
        return greg.dateFromComponents(componenets)!
    }
}

它的目的只是返回一个表示星期一早上的 NSDate。

到目前为止一切都很好......

问题是当我尝试调用这个函数时,我得到一个错误:

在调用中缺少参数 #1 的参数

我在https://stackoverflow.com/a/26156765/3100991 读到有人遇到类似问题,但他们的代码很长且令人困惑,我不明白答案。如果提供简单的解释和修复,我认为这对普通社区会很有用。

提前感谢您的帮助!

洛伊克

【问题讨论】:

    标签: swift parameters compiler-errors arguments swift-extensions


    【解决方案1】:

    我只是尝试一下(在操场上),它确实有效。 我认为你的错误在于你的方法的调用。 由于您的方法是实例方法,因此您必须在现有日期对象上调用它。 所以试着这样称呼它:

    import Foundation
    
    extension NSDate {
    
        func nineAMMonday() -> NSDate {
            let greg = NSCalendar.currentCalendar()
            let componenets = NSDateComponents()
            componenets.weekday = 2
            componenets.hour = 9
            componenets.minute = 0
            componenets.second = 0
            return greg.dateFromComponents(componenets)!
        }
    }
    // Call
    var date = NSDate();
    
    date.nineAMMonday()
    

    但在你的情况下,最好的办法是类函数。

    import Foundation
    
    extension NSDate {
    
       class func nineAMMonday() -> NSDate {
            let greg = NSCalendar.currentCalendar()
            let componenets = NSDateComponents()
            componenets.weekday = 2
            componenets.hour = 9
            componenets.minute = 0
            componenets.second = 0
            return greg.dateFromComponents(componenets)!
        }
    }
    // Call
    
    NSDate.nineAMMonday()
    

    【讨论】:

    • 感谢您的帮助。我的问题是我最初是这样称呼它的:NSDate.nineAMMonday() 而我本来是这样称呼它的:NSDate().nineAMMonday()。
    • 是的,这就是我的想法,但在你的情况下,你不需要做一个实例方法,你可以做一个类方法。所以你必须在 func 声明中添加类,并像你第一次那样调用它。 (我已经编辑了我的答案)
    猜你喜欢
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多