gpt4 book ai didi

swift - 委托(delegate)的函数返回 nil

转载 作者:行者123 更新时间:2023-11-28 12:48:31 24 4
gpt4 key购买 nike

我按照 Objective C 中的委托(delegate)教程很好地掌握了这个概念,然后尝试在 swift 中实现它。

我有一个继承“AppController”类的自定义 View ,以及一个继承“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
}
}

方形 View .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。我觉得我没有正确链接委托(delegate),但我不知道如何链接。

(对不起,我知道很多人已经问过这个问题,但他们的回答仍然让我感到困惑。)

最佳答案

您没有将 AppController 设置为 SquareView 委托(delegate),因此不会调用它。

尝试使用下面的代码,它应该可以工作。

override func awakeFromNib() {
squareView.needsDisplay = true
squareView.delegate = self
}

关于swift - 委托(delegate)的函数返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37293501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com