Ich habe versucht, diese "EXTRA ARGUMENT" Titel "IN CALL" die ganze Woche zu lösen. Unten ist der Code mit dem Fehler, mit dem ich Probleme habe. Ich habe den neuen Code, mit dem ich gerade arbeite, in Xcode hinzugefügt. Der Fehler ich mit diesem Code bekommen ist:Zusätzliches Argument im Anruf?
import UIKit
import Firebase
import FirebaseDatabase
struct PostStruct {
struct PostStruct {
let title: String
let message : String
}
}
class DatabaseViewController: UITableViewController {
var posts: [PostStruct] = []
override func viewDidLoad() {
super.viewDidLoad()
//
let databaseRef = Database.database().reference()
databaseRef.child("Posts").queryOrderedByKey().observe(.childAdded, with: {
snapshot in
let snapshotValue = snapshot.value as? NSDictionary
let title = snapshotValue?["title"] as? String
let message = snapshotValue?["message"] as? String
self.posts.insert(PostStruct(title: title ?? "", message: message ?? ""), at: 0) **// <-- ARGUMENT PASSED TO CALL THAT TAKES NO ARGUMENTS**
self.tableView.reloadData()
})
post()
}
func post(){
let title = "Title"
let message = "Message"
let post : [String : AnyObject] = ["title" : title as AnyObject, "message" : message as AnyObject]
let databaseRef = Database.database().reference()
databaseRef.child("Posts").childByAutoId().setValue(post)
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return posts.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "cell")
if cell == nil {
cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
cell?.textLabel?.text = "New value"
cell?.detailTextLabel?.text = "New value"
return cell!
} else {
cell?.textLabel?.text = "" //reset value
cell?.detailTextLabel?.text = "" // resetValue
cell?.textLabel?.text = "New value"
cell?.detailTextLabel?.text = "New value"
return cell!
}
}
}
OLD CODE "Argument, ohne Argumente ANRUFEN PASSED" NEW CODE
import UIKit import Firebase import FirebaseDatabase struct PostStruct { let title = String!.self let message : String! } class DatabaseViewController: UITableViewController { var posts = [postStruct]() override func viewDidLoad() { super.viewDidLoad() // let databaseRef = Database.database().reference() databaseRef.child("Posts").queryOrderedByKey().observe(.childAdded, with: { snapshot in let snapshotValue = snapshot.value as? NSDictionary let title = snapshotValue?["title"] as? String let message = snapshotValue?["message"] as? String self.posts.insert(PostStruct(title: title ,message: message), at: 0) // **<-- EXTRA ARGUMENT 'title' IN CALL** self.tableView.reloadData() }) post() } func post(){
Wenn 'postStruct' eigentlich ein Struct ist wie sein Name, dann sollten Sie es als' PostStruct'; Das ist eine Swift Convention, also macht es die Sache klarer für alle. Hat 'PostStruct' eine' init', die sowohl 'title' als auch' message' enthält? – Connor
Post-Struktur ist nur der Name der Struktur & nein, es hat keine Init. @Connor – LaniMJ
Verwenden Sie die Autokomplettierungsfunktion, um das postStruct in das Array einzufügen. Wenn es nicht funktioniert, versuchen Sie es mit postStruct.init, und das sollte die Argumente automatisch vervollständigen und den Compiler und sich selbst befriedigen. –