“0”在 swift 中不可转换为 BackgroundView

"0" is not convertible to BackgroundView in swift

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

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 , 请解决此问题并提前致谢。

原因:

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

您为 self.gradientView 分配 initWithNewFrame 的 return 值,但在您的代码中,initWithNewFrame 没有 return 值。

在Swift中,没有return值意味着return一个空元组。所以你得到了““0” is not convertible to BackgroundView”错误,因为你想用一个空元组分配一个 BackgroundView

也许这是您期望的方法:

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

        }
        return backgroundView
    }

更新:

如果你想为 class BackgroundView 创建一个自定义初始化器,试试这个:

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