Swift 通话中有额外的争论吗?

Swift 通话中有额外的争论吗?,swift,compiler-errors,Swift,Compiler Errors,整个星期我都在努力解决这个“通话中的额外争论”问题。下面是我遇到问题的错误代码。我已经添加了我目前在Xcode中使用的新代码。我在使用此代码时遇到的错误是: “传递给不带参数的调用的参数” 新代码 import UIKit import Firebase import FirebaseDatabase struct PostStruct { struct PostStruct { let title: String let message : Strin

整个星期我都在努力解决这个“通话中的额外争论”问题。下面是我遇到问题的错误代码。我已经添加了我目前在Xcode中使用的新代码。我在使用此代码时遇到的错误是:

“传递给不带参数的调用的参数”

新代码

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!
        }
    }
}
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(){
导入UIKit
进口火基
导入FirebaseDatabase
结构后结构{
结构后结构{
标题:字符串
让消息:字符串
}
}
类DatabaseViewController:UITableViewController{
var posts:[PostStruct]=[]
重写func viewDidLoad(){
super.viewDidLoad()
//
让databaseRef=Database.Database().reference()
databaseRef.child(“Posts”).queryOrderedByKey().observe(.childAdded,带有:{
快照
让snapshotValue=snapshot.value为?NSDictionary
让title=snapshotValue?[“title”]作为字符串
让消息=快照值?[“消息”]作为字符串
self.posts.insert(PostStruct(标题:title??”,消息:message??”),位于:0)**//Int{
返回岗位数
}
重写func tableView(tableView:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{
var cell=tableView.dequeueReusableCell(带有标识符:“cell”)
如果单元格==nil{
cell=UITableViewCell(样式:。默认值,reuseIdentifier:“单元格”)
单元格?.textLabel?.text=“新值”
单元格?.detailTextLabel?.text=“新值”
返回单元!
}否则{
单元格?.textLabel?.text=”“//重置值
单元格?.detailTextLabel?.text=”“//重置值
单元格?.textLabel?.text=“新值”
单元格?.detailTextLabel?.text=“新值”
返回单元!
}
}
}
旧代码

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!
        }
    }
}
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(){
导入UIKit
进口火基
导入FirebaseDatabase
结构后结构{
让title=String!.self
让消息:字符串!
}
类DatabaseViewController:UITableViewController{
var posts=[postStruct]()
重写func viewDidLoad(){
super.viewDidLoad()
//
让databaseRef=Database.Database().reference()
databaseRef.child(“Posts”).queryOrderedByKey().observe(.childAdded,带有:{
快照
让snapshotValue=snapshot.value为?NSDictionary
让title=snapshotValue?[“title”]作为字符串
让消息=快照值?[“消息”]作为字符串

self.posts.insert(PostStruct(标题:title,消息:message),地址:0)//**您的
PostStruct
结构具有
title
属性的默认值。自动生成的初始值设定项将仅包含尚未具有默认值的值的参数,这就是为什么自动初始值设定项将
message
作为参数,而不是
title
。此外,您的默认值因为
title
String
类型本身,而不是字符串的实例,我怀疑这是您想要的。我也怀疑
PostStruct
的属性是否真的需要隐式展开选项

像这样声明结构,您的初始值设定项应该可以工作:

struct PostStruct {
    let title: String
    let message: String
}

您的
PostStruct
struct具有
title
属性的默认值。自动生成的初始值设定项将只包含尚未具有默认值的值的参数,这就是为什么自动初始值设定项将
message
作为参数,而不是
title
。此外,的默认值ode>title
String
类型本身,而不是字符串的实例,我怀疑这是您想要的。我也怀疑
PostStruct
的属性是否真的需要隐式展开选项

像这样声明结构,您的初始值设定项应该可以工作:

struct PostStruct {
    let title: String
    let message: String
}

您的代码有两个关键缺陷:

PostStruct
的定义如下:

struct PostStruct {
    let title: String
    let message : String
}
var posts: [PostStruct] = []
let title=String!.self
将您的
title
声明为具有类对象,而不是
String

另一个是行
DatabaseViewController

var posts = [post]
在您的代码中,
post
是一个方法,我相信您不需要方法数组

应该是这样的:

struct PostStruct {
    let title: String
    let message : String
}
var posts: [PostStruct] = []
要使上面的两个修复生效,您还需要一点:

        self.posts.insert(PostStruct(title: title ?? "", message: message ?? ""), at: 0)

您的代码中可能存在其他一些错误,但至少您需要上述修复。请尝试这些错误。

您的代码有两个关键缺陷:

PostStruct
的定义如下:

struct PostStruct {
    let title: String
    let message : String
}
var posts: [PostStruct] = []
let title=String!.self
将您的
title
声明为具有类对象,而不是
String

另一个是行
DatabaseViewController

var posts = [post]
在您的代码中,
post
是一个方法,我相信您不需要方法数组

应该是这样的:

struct PostStruct {
    let title: String
    let message : String
}
var posts: [PostStruct] = []
要使上面的两个修复生效,您还需要一点:

        self.posts.insert(PostStruct(title: title ?? "", message: message ?? ""), at: 0)

您的代码中可能还有其他一些错误,但至少您需要上述修复。尝试一下。

如果
postStruct
实际上是一个名字所暗示的结构,您应该将其大写为
postStruct
;这是一个快速约定,因此遵循它会让每个人都更清楚。
postStruct
是否有
初始化
既包含
标题
又包含
消息
?Post struct只是结构的名称&不,它没有init。@Connor使用自动完成功能将postStruct插入数组。如果它不起作用,请尝试postStruct.init,这样可以自动完成参数并满足编译器和您自己的要求。there也没有自动完成建议,我试着输入'postStruct.init',结果出现错误“不能调用非函数类型'postStruct'的值”@DominikBucher@La