如何在 swift 中初始化

how to initialize in swift

我想设置一个盒子数组,每个盒子都有一个名称和物理尺寸以及它们周围的不确定性。我创建了以下 class:

struct PhysUnit {
    var Mean: Double = 0.0
    var Sigma: Double = 0.0
}

class Box {
    var Name: String = "null"
    var Width: PhysUnit = (Mean = 0.0 , Sigma = 0.0)
    var Depth: PhysUnit
    var Height: PhysUnit
}

func setupShelves() {
    var A1Box = box()
    A1Box.name = "A1"
    A1Box.Width.Mean = 40.0
    A1Box.Width.Sigma = 0.5
//etc
    shelves.append(A1Box)
return }

但是如何初始化 class 框?我尝试了很多方法,如所示示例,但 none 有效。

你写box()。试试这个:var A1Box = Box()

您的代码中有一些错误。

  1. 大小写很重要。使用 Box,而不是 box.
  2. 类 必须有一个初始化器(一个结构应该为你创建一个)
  3. class/struct 的所有非可选属性必须在实例初始化时初始化

结构可能更适合您的模型:

struct PhysUnit {
    var Mean: Double = 0.0
    var Sigma: Double = 0.0
}

struct Box {
    var Name: String?
    var Width: PhysUnit
    var Depth: PhysUnit
    var Height: PhysUnit
}

func setupShelves() {
    var A1Box = Box(Name: "A1", Width: PhysUnit(Mean: 40, Sigma: 0.5), Depth: PhysUnit(), Height: PhysUnit())
    shelves.append(A1Box)
}

但是如果你坚持使用 class 你可以这样做:

struct PhysUnit {
    var Mean: Double = 0.0
    var Sigma: Double = 0.0
}

class Box {
    var Name: String?
    var Width: PhysUnit
    var Depth: PhysUnit
    var Height: PhysUnit

    init(Name: String?, Width: PhysUnit, Depth: PhysUnit, Height: PhysUnit) {
        self.Name = Name
        self.Width = Width
        self.Depth = Depth
        self.Height = Height
    }
}

func setupShelves() {
    var A1Box = Box(Name: "A1", Width: PhysUnit(Mean: 40, Sigma: 0.5), Depth: PhysUnit(), Height: PhysUnit())
    shelves.append(A1Box)
}

快速回答:

struct PhysUnit {
  var mean: Double = 0.0
  var sigma: Double = 0.0
}

class Box {
  var name: String = "null"
  var width: PhysUnit = PhysUnit()
  var depth: PhysUnit?
  var height: PhysUnit?

  init() {}
}

func setupShelves() {
  var A1Box = Box()
  A1Box.name = "A1"
  A1Box.width.mean = 40.0
  A1Box.width.sigma = 0.5
    ...
  shelves.append(A1Box)
}

几件事:

  • 您需要初始化所有变量或将它们设置为可选(这 是我所做的)
  • 因为PhysUnit有默认值,所以不需要 将它们设置为 var width 默认值。

编辑说明:我还更改了大小写以匹配 Swift 最佳实践

给你...

struct PhysUnit {
    var mean: Double = 0.0
    var sigma: Double = 0.0
}

struct Box {
    var name: String?
    var width = PhysUnit()
    var depth: PhysUnit?
    var height: PhysUnit?
}

func setupShelves() {
    var a1Box = Box()
    a1Box.name = "A1"
    a1Box.width.mean = 40.0
    a1Box.width.sigma = 0.5
}

您的代码存在多个问题。如果您做过 Swift 教程,它可能会有所帮助。

这可能有帮助:https://www.youtube.com/watch?v=Ulp1Kimblg0