我试图在一个圆圈中创建108个点,并且出现索引超出范围错误。点是使用UILabels数组创建的。
我有以下代码:
func createMala() {
let malaFrame = UIView()
malaFrame.frame = CGRect(x: 0, y: 0, width: view.frame.width - 20, height: view.frame.width - 20)
malaFrame.center = CGPoint(x: view.frame.width / 2.0, y: (malaFrame.frame.height / 2.0) + 20)
var malaBeadLabel = [RoundLabel]()
let malaRadius : Double = 100.0
let angleInRadians : Double = 3.3333 * .pi / 180.0
for i in 1...108 {
malaBeadLabel[i].frame = CGRect(x: (malaRadius * sin(angleInRadians) * Double(i)),
y: (malaRadius * cos(angleInRadians) * Double(i)),
width: 2.0, height: 2.0)
malaBeadLabel[i].layer.cornerRadius = 1.0
malaBeadLabel[i].layer.borderWidth = 0.25
malaBeadLabel.append(malaBeadLabel[i])
malaFrame.addSubview(malaBeadLabel[i])
}
}
我无法弄清楚索引是如何超出范围的。
答案 0 :(得分:0)
您从一个名为console.log(calc(100, 3, 1, 15));
console.log(calc(100, 4, 1, 15));
console.log(calc(100, 10, 1, 15));
console.log(calc(100, 12, 1, 15));
function calc(base, firstYearMonths, increase, totalMonths) {
let ret = base * firstYearMonths / 12;
totalMonths -= firstYearMonths;
let year = 1;
while(totalMonths > 0) {
ret += base * (1 + (increase * year) / 100) * Math.min(totalMonths, 12) / 12;
totalMonths -= 12;
year += 1;
}
return ret;
}
的空数组开始。
然后在循环的第一次迭代中,当malaBeadLabel
为1时,尝试i
。这当然会导致错误,因为malaBeadLabel[i]
为空,并且索引1(或0,或任何其他索引)没有任何内容。
最重要的是,您实际上从未尝试创建任何malaBeadLabel
实例。
更改循环代码,以便您不尝试访问数组中的任何内容,只需将其添加到数组中即可。并创建实际的标签实例。
RoundLabel
顺便说一句-为什么没有代码在for i in 1...108 {
let label = RoundLabel(frame: CGRect(x: (malaRadius * cos(angleInRadians * Double(i))),
y: (malaRadius * sin(angleInRadians * Double(i))),
width: 2.0, height: 2.0))
label.layer.cornerRadius = 1.0
label.layer.borderWidth = 0.25
malaBeadLabel.append(label)
malaFrame.addSubview(label)
}
类中设置标签的拐角半径和边框宽度?
答案 1 :(得分:0)
我能够弄清楚这一点。我在圆周围的UILabel的x和y坐标上都添加了UIBezier路径半径,并且有效