我有这个类方法,我在我的视图控制器中调用此方法

class func initWithNewFrame(var frame : CGRect?)
    {
        if let newFrame = frame
        {
            var backgroundView : BackgroundView = BackgroundView(frame: newFrame)

        }
    }


我叫

var frameNew : CGRect = CGRectMake(self.view.frame.origin.x,
            self.view.frame.origin.y,
            self.view.frame.size.width,
            self.view.frame.size.height)
        self.gradientView = BackgroundView.initWithNewFrame(frameNew)


而且我得到此错误“ 0”不能迅速转换为BackgroundView

请解决此问题,并在此先感谢。

最佳答案

原因:

错误来自这里:self.gradientView = BackgroundView.initWithNewFrame(frameNew)

您为self.gradientView分配了返回值initWithNewFrame,但是在您的代码中,initWithNewFrame没有返回值。

在Swift中,没有返回值意味着返回一个空的元组。因此,您收到““ 0”不可转换为BackgroundView”错误,因为您要为BackgroundView分配一个空元组。

也许这是您期望的方法:

class func initWithNewFrame(var frame : CGRect?) -> BackgroundView?
    {
        var backgroundView : BackgroundView? = nil
        if let newFrame = frame
        {
            backgroundView = BackgroundView(frame: newFrame)

        }
        return backgroundView
    }


更新:

如果要为类BackgroundView创建自定义初始化程序,请尝试以下操作:

convenience init(var frame : CGRect?) {
    if let newFrame = frame
    {
        self.init(newFrame )
    }
    // Do custom thing
}

关于swift - 不能立即将“0”转换为BackgroundView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30045121/

10-10 09:54