gpt4 book ai didi

iOS swift : Using delegate methods in custom class

转载 作者:行者123 更新时间:2023-11-29 02:23:59 25 4
gpt4 key购买 nike

我正在尝试快速创建一个条形图类,但在设置委托(delegate)时遇到困难......这是我目前所拥有的......

条形图.swift:

import Foundation
import UIKit

@objc protocol BarChartDelegate {

optional func barChart(colorForBarAtIndex index: Int) -> UIColor
}

class BarChart : BarChartDelegate {

let data : [NSDecimalNumber]
let container = UIView()

var barWidth : CGFloat = 100
var barSpacing : CGFloat = 10

var delegate : BarChartDelegate?

init(data: [NSDecimalNumber], frame: CGRect) {

self.data = data
self.container.frame = frame

drawGraph()

}

func drawGraph() {

var i = 0

for item in self.data {

var bar = UIView()

let xPos = CGFloat(i)*self.barWidth

bar.frame = CGRectMake(xPos, 0, self.barWidth, 100)

if let del = delegate? {

bar.frame
println(del.barChart!(colorForBarAtIndex: i))

bar.backgroundColor = del.barChart!(colorForBarAtIndex: i)

}
else {
println("nope!")
}

self.container.addSubview(bar)

i++

}

}

}

ViewController.swift

class ViewController: UIViewController, BarChartDelegate {

var colors = [
UIColor.greenColor(),
UIColor.blueColor(),
UIColor.redColor()
]

override func viewDidLoad() {

super.viewDidLoad()

var barChart = BarChart(data: [NSDecimalNumber(double: 100.00), NSDecimalNumber(double: 200.00), NSDecimalNumber(double: 300.00)], frame: CGRectMake(0, 0, 400.00, 100.00))

self.view.addSubview(barChart.container)

}

func barChart(colorForBarAtIndex index: Int) -> UIColor { // this is not running?

return self.colors[index]

}


}

我的 ViewController.swift 文件中的委托(delegate)方法没有运行,我只是将 "nope!" 打印到控制台 3 次...这是委托(delegate)可选查找 nil 的结果什么时候展开?

我在这里遗漏了什么吗?

如有任何帮助,我们将不胜感激!

谢谢,戴夫

最佳答案

首先,BarChart 同时也是 BarChartDelegate 几乎没有意义。你不会把事情委托(delegate)给自己!

其次,据我所知,您实际上并未将 ViewController 设置为 BarChart 的委托(delegate)。仅仅采用 BarChartDelegate 协议(protocol)还不足以做到这一点;您需要明确设置它。

因此,例如,您可能希望在创建 BarChart 后执行此操作:

var barChart = ...
barChart.delegate = self

或者,如果委托(delegate)对于您的图表至关重要,您可能需要更改构造函数以接受委托(delegate)作为参数。

关于iOS swift : Using delegate methods in custom class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27771403/

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