Ich habe ein Upgrade auf Xcode 11 und Swift 5 durchgeführt und bin auf ein Problem mit Methodenerweiterungen gestoßen, wenn diese über ein Framework verfügbar gemacht werden. Genauer gesagt, in einem Projekt, das wie folgt strukturiert ist:
-> Main Project
-> Framework created from sources in 'Main Project'
-> Subproject using the above Framework (Sources packaged in the framework are not visible to the sub-project)
Alles wird kompiliert und läuft einwandfrei, aber wenn Debug-Sitzungen für das Teilprojekt ausgeführt werden, werden alle Erweiterungen in 'Framework' zurückgegeben, error: ambiguous use of
wenn sie über die lldb-Befehlszeile aufgerufen werden. Hier ist ein Codebeispiel, um eine Idee zu geben:
Erstellen Sie ein Befehlszeilenprojekt für macOs und fügen Sie ein neues Ziel, 'MagicFramework', und in einer Datei Spells.swift hinzu (stellen Sie sicher, dass die Datei für Main & MagicFramework sichtbar ist).
import Foundation
extension String {
public func castSpell() -> String {
return "✨ " + self
}
}
Erstellen Sie dann ein Unterprojekt 'Wizard' und in einer Datei wizard.swift (nur für Wizard sichtbar):
import Foundation
import MagicFramework
public class Tadaa {
public func magic(spell:String) -> String {
return spell.castSpell()
}
}
Fügen Sie in der Datei main.swift des Assistenten Folgendes hinzu:
import Foundation
let aa = Tadaa().magic(spell: "this is magic")
print(aa)
Sie sollten die folgende Struktur haben:
-> Main project
----> MagicFramework
----> Wizard subproject
Erstellen und führen Sie dann das Sub "Wizard" mit einem Haltepunkt spell.castSpell()
in Tadaa
. Geben Sie an der lldb-Eingabeaufforderung Folgendes ein:
(lldb)po spell.castSpell()
error: <EXPR>:3:1: error: ambiguous use of 'castSpell()'
spell.castSpell()
Warum?? Dieses Problem trat bei Xcode 10 nicht auf.