web-dev-qa-db-ja.com

Swiftエラー:ソースファイルのエディタープレースホルダー

こんにちは、グラフデータ構造を実装しています。アプリケーションをビルドしようとすると、「ソースファイルのエディタープレースホルダー」というエラーが表示されます。

完全なグラフ実装は、ここからWayneBishopのGitHubから取得されました https://github.com/waynewbishop/SwiftStructures

class Path {

var total: Int!
var destination: Node
var previous: Path!

init(){
    //Error happens on next line
    destination = Node(key: String?, neighbors: [Edge!], visited: Bool, lat: Double, long: Double)
     }
}

Nodeクラスを次のように変更しました:

public class Node{

var key: String?
var neighbors: [Edge!]
var visited: Bool = false
var lat: Double
var long: Double

init(key: String?, neighbors: [Edge!], visited: Bool, lat: Double, long: Double) {
    self.neighbors = [Edge!]()
     }

}

このエラーは、これまでに作成したコード全体で5回発生します。また、この質問は尋ねられましたが、答えられていません。

このエラーは、Nodeクラスのinit()への変更が原因であると考えられます。私の変更前は、init()でした。もしそうなら、どうすればクラスにオブジェクトを追加できますか?プログラミング用語が正しくない場合は、OOPが比較的新しいのでご容赦ください。

26

あなたはこれを持っていました

destination = Node(key: String?, neighbors: [Edge!], visited: Bool, lat: Double, long: Double)

上記のプレースホルダーテキストでしたが、いくつかの値を挿入する必要があります

class Edge{

}

public class Node{

  var key: String?
  var neighbors: [Edge]
  var visited: Bool = false
  var lat: Double
  var long: Double

  init(key: String?, neighbors: [Edge], visited: Bool, lat: Double, long: Double) {
    self.neighbors = [Edge]()
    self.key = key
    self.visited = visited
    self.lat = lat
    self.long = long
  }

}

class Path {

  var total: Int!
  var destination: Node
  var previous: Path!

  init(){
    destination = Node(key: "", neighbors: [], visited: true, lat: 12.2, long: 22.2)
  }
}
7
David Yang Liu

場合によっては、XCodeは、「エディタープレースホルダー」のある行を、ユーザーが値で置き換えた場合でも忘れないことがあります。 XCodeが問題を報告しているコードの部分を切り取り、同じ場所にコードを貼り付けて、エラーメッセージが消えるようにします。これは私のために働いた。

34
Vishal Chaudhry

Command + Shift + Bの後、プロジェクトは正常に動作します。

5
Mr. Ahtazaz

エラーは単純であり、関数呼び出しで使用したプレースホルダーが間違っているためです。 init内では、関数にパラメーターを渡していません。このようにする必要があります

destination = Node("some key", neighbors: [Edge1 , Edge2], visited: true, lat: 23.45, long: 45.67) // fill up with your dummy values

または、デフォルトの方法で初期化することができます

destination = Node()

UPDATE

Nodeクラスに空の初期化子を追加します

init() {

}
1

ビルドフォルダのクリーン+ビルド

コードを修正した後でもエラーがあればクリアします。

0
Random Aspirer

UI要素ではなくView Controllerでセグエを作成しているときにこのエラーが発生した場合は、sender: Any?をこれに変更する必要があります

@IBAction func backButtonPressed(_ sender: Any) {
        performSegue(withIdentifier: "goToMainScreen", sender: self)

    }

それが動作します。

0