我尝试以编程方式在我的应用中创建子视图,基本上我是swift的初学者,而我正在尝试创建9个子视图。我收到错误"无法转换类型' int'进入预期的论证类型' CGfloat'" CGFloat值为A&乙
import Foundation
import UIKit
@IBDesignable
class Subview: UIView {
@IBInspectable var view1 : UIView = UIView() {
didSet {
var A:CGFloat = 0
var B:CGFloat = 0
for A in 1...3 {
for B in 1...3 {
view1.frame = CGRectMake(A,B, 100, 100)
view1.backgroundColor = UIColor.blueColor()
self.addSubview(view1)
}
}
}
}
}
答案 0 :(得分:2)
您使用相同名称但A
类型变量的循环重载了B
和Int
个变量(了解有关for in
循环的更多信息)。在将变量用作for in
中的元素之前,您不需要声明变量,它们是在本地循环范围内隐式创建的,具有集合元素的类型(在您的情况下再次为Int
)。 CGRectMake(_:_:_:_:)
期待您CGFloat
;而且@Martin R指出你最好使用CGRect(x:y:width:height:)
。此代码将解决转换类型问题:
didSet {
for A in 1...3 {
for B in 1...3 {
view1.frame = CGRect(x: A, y: B, width: 100, height: 100)
view1.backgroundColor = UIColor.blueColor()
self.addSubview(view1)
}
}
}
但它有其他逻辑问题。 UIView
(view1)的实例只能在一个视图层次结构中同时添加。因此,实际上,didSet
中的所有代码都会与此代码具有相同的结果:
didSet {
view1.frame = CGRect(x: 3, y: 3, width: 100, height: 100)
view1.backgroundColor = UIColor.blueColor()
self.addSubview(view1)
}
另请注意,didSet
观察者未在初始化步骤中调用,因此如果您不重新分配view1
属性,则此代码将永远不会被执行。
答案 1 :(得分:0)
@NDoc答案会帮助你,但你需要知道如何工作 你不必申报A和B,只需使用
for A in 0...3 {
for B in 0...3 {
它会自行增加