gpt4 book ai didi

Swift 方法 - 多个参数 "extra argument in call"错误

转载 作者:行者123 更新时间:2023-11-28 12:56:37 25 4
gpt4 key购买 nike

我正在尝试在我的代码中使用方法。

我创建了一个新的 swift 文件,命名为:剪辑管理器.swift

其中有我的保存功能:

class ClipManager{
func SaveMethod(publicDatabase: CKDatabase, myRecord:CKRecord ) -> CKRecord
{

publicDatabase.saveRecord(myRecord, completionHandler:
({returnRecord, error in
if let err = error {
self.notifyUser("Save Error", message:
err.localizedDescription)
} else {
dispatch_async(dispatch_get_main_queue()) {
self.notifyUser("Success",
message: "Record saved successfully")
}

///self.currentRecord = myRecord
}
}))
/// return myRecord
}
}

我试图从我的 viewcontroller.swift 文件中调用它:

let currentRecord = ClipManager.SaveMethod(publicDatabase, myRecord)

但是我收到以下错误:

extra argument in call

最佳答案

好吧,第一个问题是 SaveMethod 是一个实例方法。即应该在实例而不是类上调用。编译器告诉您有一个额外的参数,因为当您在此实例的类上调用实例方法时,它希望您提供该方法应绑定(bind)到的实例。例如:

let myClipManager = ClipManager()
let mySaveMethod = ClipManager.SaveMethod(myClipManager)
let currentRecord = mySaveMethod(publicDB, myRecord: myRecord)

这相当于下面的

let myClipManager = ClipManager()
let currentRecord = myClipManager.SaveMethod(publicDB, myRecord: myRecord)

第二种方法更容易理解,或者您可以将 SaveMethod 声明为可以在类上直接调用的类 func。

关于为什么需要声明第二个参数的名称而不是第一个参数的问题,按照惯例,在 Swift 中不需要第一个参数的名称,因为它应该从方法名称本身推断出来。例如:

func saveRecord(record: CKRecord, inDatabase: CKDatabase){}
// call the method
saveRecord(myRecord, inDatabase: myDatabase)

这里第一个参数名称 record 可以省略,因为它是从方法名称 saveRecord 推导出来的,它清楚地获取记录并保存它。不过,您可以强制要求第一个参数名称。例如:

func saveRecord(record record: CKRecord, inDatabase: CKDatabase){}
// the method should be called like this
saveRecord(record: myRecord, inDatabase: myDatabase)

此外,您可以为同一个参数指定 2 个名称,第一个在调用时使用,第二个在函数体内使用。例如:

func saveRecord(record aRecord: CKRecord, inDatabase db: CKDatabase) {
// to use the passed record you should use the aRecord variable
// to use the passed database you should use the db variable
save(aRecord, db)
}
// but the method should be called in the following way
saveRecord(record: myRecord, inDatabase: myDatabase)

最后但同样重要的是,您可以使用以下方法省略为任何参数添加名称的必要性:

func saveRecord(record: CKRecord, _ db: CKDatabase) {}
// call the method
saveRecord(myRecord, myDatabase) // you don't have to name the second parameter because of the _ before its name

因此,当您在参数名称前加上 _ 时,这意味着调用者可以在调用该方法时省略此参数的名称,并且默认情况下在 Swift 中省略第一个参数名称而不用需要在其名称前加上 _

关于Swift 方法 - 多个参数 "extra argument in call"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34898490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com