“0”在swift中无法转换为BackgroundView

时间:2015-05-05 05:44:40

标签: swift methods ios8.1 class-method

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

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”在swift中无法转换为BackgroundView , 请解决此问题,并提前感谢。

1 个答案:

答案 0 :(得分:1)

<强>原因:

错误来自此处: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
}