Ich folgte eine Delegation Tutorial in Objective C ziemlich begriffen das Konzept, und dann versuchen, es in swift zu implementieren.Delegate-Funktion gibt Null
Ich habe eine benutzerdefinierte Ansicht erben "AppController" -Klasse, und ein NSObject erbt "SquareView" -Klasse.
AppContoller.swift
import Cocoa
class AppController: NSObject,SquareViewDelegate {
var squareCount:Int = 10
@IBOutlet var squareView: SquareView!
override func awakeFromNib() {
squareView.needsDisplay = true
}
@IBAction func changeSquareCount(sender:AnyObject) {
squareCount = Int(sender.intValue)
squareView.needsDisplay = true
}
func numberOfSquaresInQuareView(squareView: SquareView) -> Int {
return squareCount
}
}
SquareView.swift
import Cocoa
import Foundation
protocol SquareViewDelegate {
func numberOfSquaresInQuareView(squareView:SquareView)->Int
}
class SquareView: NSView {
var delegate: SquareViewDelegate!
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
NSColor.redColor().set()
let num: Int = delegate.numberOfSquaresInQuareView(self)
for _ in 0..<num {
let x:CGFloat = CGFloat(arc4random()) % CGFloat(self.frame.size.width - 20)
let y:CGFloat = CGFloat(arc4random()) % CGFloat(self.frame.size.width - 20)
NSRectFill(NSMakeRect(x, y, 10, 10))
}
}
}
Wenn ich erstellen und auszuführen, nil meine delegate.numberOfSquaresInSquareView kehrt zurück. Ich habe das Gefühl, dass ich den Delegierten nicht richtig verbunden habe, aber ich weiß nicht wie.
(tut mir leid, ich weiß, dass viele Leute fragen, haben diese Frage bereits, aber ihre Antworten mich noch verwirren.)
Es funktioniert! Danke! Ich habe versucht, das Gegenteil zu tun, Delegat in SquareView = AppController setzen. –
Freut mich zu hören, einen schönen Tag. –