Objective Cの委託チュートリアルに続いて、その概念をかなり把握し、迅速に実装しようとしました。代理人の関数はnilを返す
"AppController"クラスを継承するカスタムビューと、 "SquareView"クラスを継承するNSObjectがあります。
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で代理人を設定して、反対をやろうとしています。 –
うれしいことを聞いてうれしいです。 –