2017-08-20 5 views
0

私はこの「EXTRA ARGUMENT」のタイトルを「IN CALL」のすべての週に解決しようとしています。以下は私が問題を抱えているエラーのコードです。 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! 
     } 
    } 
} 

OLD CODE

NEW CODE "THATを呼び出すために渡される引数は、引数を取りません"

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(){ 
+1

'postStruct'が実際にその名前のように構造体である場合、それを' PostStruct'として大文字にする必要があります。それはスウィフトコンベンションなので、それに従うことですべての人にとってより明確なものになります。 'PostStruct'は' title'と 'message'の両方をとる' init'を持っていますか? – Connor

+0

POST構造体は構造体の名前に過ぎません。いいえ、initがありません。 @Connor – LaniMJ

+0

オートコンプリート機能を使用して、postStructを配列に挿入します。それがうまくいかない場合でも、postStruct.initを試してみてください。それは引数を自動完成し、コンパイラと自分自身を満足させるはずです。 –

答えて

1

あなたのコードは、2つの重大な欠陥があります。

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

PostStructの定義は、このようなものでなければなりません

let title = String!.selftitleにはStringではなく、クラスオブジェクトがあると宣言しています。

し、別の行DatabaseViewControllerです:postはメソッドで、あなたのコードで

var posts = [post] 

、私はあなたがメソッドの配列をしたくないと考えています。このようなものでなければなりません

var posts: [PostStruct] = [] 

、仕事に上記の二つの修正を行うためには、あなたがもう少し必要があります。

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

あなたは、あなたのコード内のいくつかの他の障害を有していてもよく、少なくとも上記の修正が必要です。それらを試してください。

+0

私は、 "self.posts.insert(postStruct(title:title ??" "、メッセージ:メッセージ?しかし今、私はエラーを取得しています "引数は引数を取らない呼び出しに渡されました" – LaniMJ

+0

示されているように 'PostStruct'の定義を置き換えましたか? – OOPer

+0

本当に助けに感謝します、私はneですXcodeでwと私はおそらく、おかしいばかのように聞こえる! @OOPer – LaniMJ

0

PostStruct構造体には、titleプロパティの既定値があります。自動的に生成されるイニシャライザには、既定値を持たない値のパラメータのみが含まれます。そのため、自動イニシャライザはmessageをパラメータとして持ち、titleではありません。また、titleのデフォルト値は、文字列のインスタンスではなく、Stringタイプそのものです。これは疑問です。私はまた、PostStructのプロパティが本当に暗黙的にアンラップされたオプションである必要があることを疑う。

は、このような構造体を宣言し、あなたの初期化作業をする必要があります:

struct PostStruct { 
    let title: String 
    let message: String 
} 
関連する問題