こんにちは、グラフデータ構造を実装しています。アプリケーションをビルドしようとすると、「ソースファイルのエディタープレースホルダー」というエラーが表示されます。
完全なグラフ実装は、ここから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が比較的新しいのでご容赦ください。
あなたはこれを持っていました
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)
}
}
場合によっては、XCodeは、「エディタープレースホルダー」のある行を、ユーザーが値で置き換えた場合でも忘れないことがあります。 XCodeが問題を報告しているコードの部分を切り取り、同じ場所にコードを貼り付けて、エラーメッセージが消えるようにします。これは私のために働いた。
Command + Shift + Bの後、プロジェクトは正常に動作します。
エラーは単純であり、関数呼び出しで使用したプレースホルダーが間違っているためです。 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() {
}
ビルドフォルダのクリーン+ビルド
コードを修正した後でもエラーがあればクリアします。
UI要素ではなくView Controllerでセグエを作成しているときにこのエラーが発生した場合は、sender: Any?
をこれに変更する必要があります
@IBAction func backButtonPressed(_ sender: Any) {
performSegue(withIdentifier: "goToMainScreen", sender: self)
}
それが動作します。