Я последовал за инструкциями по делегированию в Objective C, которые полностью поняли концепцию, а затем попытаются реализовать ее быстро.Функция делегата возвращает nil
У меня есть пользовательский вид, наследующий класс «AppController» и NSObject, наследующий класс «SquareView».
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))
}
}
}
Когда я построить и запустить, мои delegate.numberOfSquaresInSquareView возвращает NIL. Я чувствую, что я не связал делегата правильно, но я не знаю, как это сделать.
(я извиняюсь, я знаю, что многие люди задают этот вопрос уже, но их ответы до сих пор путают меня.)
Это работает! Спасибо! Я пытался сделать обратное, установив делегат в SquareView = AppController. –
Рад слышать, хорошо провести день. –