Ich versuche, den Delegationsprozess für Swift in Xcode 8 zu lernen.Was ist der richtige Weg, um einen Delegaten abzuleiten?
Ich kann es funktioniert gut, aber habe eine Frage über die Unterklasse in meinem Delegaten. Normalerweise wäre in Objective-C die Unterklasse dafür NSObject
. Ich kann es mit NSObject
und AnyObject
arbeiten. Ich habe in einem Artikel gelesen, dass ich Objective-C wegen der Performance nicht überquert habe. Ist das wirklich wichtig? Wenn es keine Ansicht oder eine andere Art von Controller ist, welche Unterklasse gibt es in Swift für ein Objekt?
Ist AnyObject
das gleiche wie NSObject
?
Viewcontroller
import UIKit
class ViewController: UIViewController, TestDelegate {
// init the delegate
let theDelegate = TheDelegate()
@IBOutlet weak var label1: UILabel!
@IBAction func button1(_ sender: Any) {
// tell the delegate what to do
theDelegate.run(add: 1)
}
override func viewDidLoad() {
super.viewDidLoad()
theDelegate.delegate = self
}
// the protocol
func didTest(int: Int) {
label1.text = "\(int)"
print ("Got back from delegate \(int)")
}
}
Objekt TestProtocol.swift
import Foundation
protocol TestDelegate: class {
func didTest(int: Int)
}
class TheDelegate: AnyObject{
weak var delegate: TestDelegate?
func run(add: Int){
let test = add + 1
delegate?.didTest(int: test)
}
}
Es gibt keinen Grund für '' TheDelegate' AnyObject' zu verlängern (oder jede andere Klasse). – rmaddy
Und nirgendwo bauen Sie ein Protokoll ab. 'ViewController' entspricht einem Protokoll, Sie haben jedoch keine Unterklassen von Delegaten (zumindest nicht in dem von Ihnen geposteten Code). – rmaddy
Im Anschluss an @rmaddy scheint die Terminologie verwirrend zu sein: 'NSObject' (die Klasse) ist keine Unterklasse von irgendetwas, sondern ist * superclass * der meisten Objective-C-Objekte (und du und ignorierst die, für die sie gilt ist nicht für den Moment). – CRD