无法从Class调用UIView并通过For循环进行转换

时间:2016-06-23 11:54:12

标签: ios swift for-loop uiview casting

我想通过For循环播放添加大约十几个UIViews。目前正在设置它并且无法使其正常工作。退后一步,试着只设置一个UIView,但仍然没有运气。

我收到错误:

  

致命错误:在解包可选值时意外发现nil

对于我所做错的任何建议,我们将不胜感激:

代码:

class ViewController: UIViewController {

    var button: HamburgerButton! = nil
    var block1: shapeTestUI! = nil

    override func viewDidLoad() {
        super.viewDidLoad()
        let block = createBlock(block1)
        self.view.addSubview(block)
    }

    func createBlock(blocks:UIView) -> UIView {
        let block = blocks as UIView
        block.frame = CGRectMake(0, 0, 50, 50)
        return block
    }
}

4 个答案:

答案 0 :(得分:1)

您必须先将block1初始化,然后才能将其传递给createBlock,因为blocks功能参数不是可选的:

override func viewDidLoad() {
    super.viewDidLoad()

    block1 = shapeTestUI() //Or any init from your shapeTestUI model

    let block = createBlock(block1)
    self.view.addSubview(block)


}

答案 1 :(得分:1)

在访问视图之前初始化视图。

class ViewController: UIViewController {

var button: HamburgerButton! = nil
var block1: shapeTestUI! = shapeTestUI()

override func viewDidLoad() {
    super.viewDidLoad()
    let block = createBlock(block1)
    self.view.addSubview(block)
}

func createBlock(blocks:UIView) -> UIView {
    let block = blocks as UIView
    block.frame = CGRectMake(0, 0, 50, 50)
    return block
}
}

答案 2 :(得分:1)

您可以使用this Array initializer

创建一个UIView数组

init(count count:Int,repeatedValue repeatedValue:Element)

答案 3 :(得分:0)

您为block1对象指定了nil,并在初始化对象之前直接将其传递给方法。 所以在将block1传递给方法之前,先将它初始化。