无法将int类型的值转换为预期参数类型' CGfloat'

时间:2016-08-03 12:13:43

标签: swift int

我尝试以编程方式在我的应用中创建子视图,基本上我是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)
                }
            }
        }
    }

}

2 个答案:

答案 0 :(得分:2)

您使用相同名称但A类型变量的循环重载了BInt个变量(了解有关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 {

它会自行增加