从 Swift 3 更新项目时出现便利初始化错误

Convenience init error when updating project from Swift 3

我正在更新在 Swift 3 中创建的项目,现在出现以下错误。

The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions

关于这个错误有很多答案,但我不明白我应该如何在下面的代码中创建属性的子表达式,因为需要这些属性。

extension SJTSettings {
convenience init(width: Int? = nil,
                 height: Int? = nil,
                 videoCodec: String? = nil,
                 videoBitrate: Int? = nil,
                 keyframeInterval: Int? = nil,
                 h264Profile: String? = nil,
                 audioCodec: Int? = nil,
                 audioBitrate: Int? = nil)
{

    self.init(properties: [ // where the error warning appears
        "width": width ?? NSNull(),
        "height": height ?? NSNull(),
        "videoCodec": videoCodec ?? NSNull(),
        "videoBitrate": videoBitrate ?? NSNull(),
        "keyframeInterval": keyframeInterval ?? NSNull(),
        "h264Profile": h264Profile ?? NSNull(),
        "audioCodec": audioCodec ?? NSNull(),
        "audioBitrate": audioBitrate ?? NSNull(),
    ])
  }
}

如有任何帮助或指导,我们将不胜感激,谢谢

在传递给指定的 init 之前声明属性应该有助于类型推断

convenience init(width: Int? = nil,
                 height: Int? = nil,
                 videoCodec: String? = nil,
                 videoBitrate: Int? = nil,
                 keyframeInterval: Int? = nil,
                 h264Profile: String? = nil,
                 audioCodec: Int? = nil,
                 audioBitrate: Int? = nil)
{ 
    let properties: [String: Any] = [

           "width": width ?? NSNull(),
           "height": height ?? NSNull(),
           "videoCodec": videoCodec ?? NSNull(),
           "videoBitrate": videoBitrate ?? NSNull(),
           "keyframeInterval": keyframeInterval ?? NSNull(),
           "h264Profile": h264Profile ?? NSNull(),
           "audioCodec": audioCodec ?? NSNull(),
           "audioBitrate": audioBitrate ?? NSNull(),

    ]

    self.init(properties: properties)
}