IOS Swift:在自定义中使用委托方法 class
IOS Swift: Using delegate methods in custom class
我正在尝试在 swift 中创建条形图 class,但在设置委托时遇到困难....这是我目前所拥有的...
BarChart.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 文件中的委托方法没有运行,我只是将 "nope!"
打印到控制台 3 次...这是展开时委托可选发现 nil 的结果?
这里有我遗漏的东西吗?
如有任何帮助,我们将不胜感激!
谢谢,
戴夫
首先,BarChart
也成为 BarChartDelegate
几乎没有意义。你不会把事情委托给自己!
其次,据我所知,您实际上并未将 ViewController
设置为 BarChart
的委托。仅仅采用 BarChartDelegate
协议是不够的;你需要明确地设置它。
因此,例如,您可能希望在创建 BarChart
:
var barChart = ...
barChart.delegate = self
或者,如果委托对您的图表至关重要,您可能需要更改构造函数以接受委托作为参数。
我正在尝试在 swift 中创建条形图 class,但在设置委托时遇到困难....这是我目前所拥有的...
BarChart.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 文件中的委托方法没有运行,我只是将 "nope!"
打印到控制台 3 次...这是展开时委托可选发现 nil 的结果?
这里有我遗漏的东西吗?
如有任何帮助,我们将不胜感激!
谢谢, 戴夫
首先,BarChart
也成为 BarChartDelegate
几乎没有意义。你不会把事情委托给自己!
其次,据我所知,您实际上并未将 ViewController
设置为 BarChart
的委托。仅仅采用 BarChartDelegate
协议是不够的;你需要明确地设置它。
因此,例如,您可能希望在创建 BarChart
:
var barChart = ...
barChart.delegate = self
或者,如果委托对您的图表至关重要,您可能需要更改构造函数以接受委托作为参数。