Ich versuche, Informationen von Controller A zu Controller B zu übergeben. Die Sache ist, ich will:Informationen zwischen den Controllern Swifty (/ Protokoll) übergeben?
Concise: Um die Autovervollständigung von
XCode
bis zu einem gewissen Schlüsselinformationen zu minimieren. Ich möchte auf einfache Weise wissen, welche Parameter genau benötigt werden, bevor ich den Controller auf den Stapel schiebe.Vermeiden Sie Übergänge. Aus meinem Verständnis ergeben sich im Storyboard viele Überschneidungen. Ich möchte nicht vom Storyboard abhängig sein, um Informationen weiterzugeben. (Jedes Mal, wenn ich Controller A zu einem anderen wechseln möchte, muss ich zum Storyboard gehen, um einige Änderungen vorzunehmen). Ich könnte meine App irgendwann in mehrere Storyboards aufteilen, und es kann ziemlich nervig sein, mit anderen umzugehen.
Schöne: Vielleicht Swift kann eine Swifty Lösung bieten, an die ich nicht gedacht habe.
Pushing ein Controller als Protokoll würde mir erlauben, genaue Sichtbarkeit meiner Attribute.
Es gibt keine enge Kopplung mit dem Storyboard
Viele Steuerungen (A, C, D), um eine B-Controller drücken möchten vielleicht verwandt ist, könnte ich sie jeden von ihnen ein anderes Protokoll geben Controller schieben B. Vielleicht könnte B unter anderen Umständen auftreten.
Was ich zuerst versuchen wollte, war, Controller als Protokoll zu drücken. Auch wenn es nicht möglich ist, lassen Sie mich erklären:
Zuerst wurde mein Code wie die Suche (die Storyboard-Erweiterung funktioniert):
if let myBCustomVC = storyboard.instanciateControllerWithIdentifier(MyBCustomVC.self) as? myVCustomFromAProtocol{
myBCustomVC.AToB = self.data.count
self.navigationController?.pushViewController(myBCustomVC, animated: true)
}
protocol myVCustomFromAProtocol {
var AToB: Int {get set}
}
Die Sache ist, kann ich einen View-Controller gesenkten ein Protokoll nicht drücken. Ich musste mit einer hässlichen UINavigationController
Erweiterung kommen. Hier ist das volle Ergebnis.
if let myBCustomVC = storyboard.instanciateControllerWithIdentifier(MyBCustomVC.self) as? myVCustomFromAProtocol{
myBCustomVC.AToB = self.data.count
self.navigationController?.pushViewController(vcToPush: myBCustomVC, animated: true)
}
extension UINavigationController{
func pushViewController(vcToPush: Any, animated: Bool){
if let vc = vcToPush as? UIViewController{
self.pushViewController(vc, animated: animated)
}
}
}
Seien wir ehrlich, während meine ersten beiden Ziele zu erreichen, ich habe einen ANY zu einem UIViewController
, woosh downcasted.
Gibt es eine Möglichkeit enge Kopplung und Push-Controller auf dem Stapel in eine schönen Weise zu vermeiden, während eine eingeschränkte Sicht auf den Parameter zu halten von dem ersten View-Controller zu übergeben (A) zu dem zweiten (B). Was sind deine Gedanken? Warum sollte ich das nicht tun?
Vielleicht ist dies von Wert für Sie: https://talk.objc.io/episodes/S01E05-connecting-view-controllers – Koen