как инициализировать в swift - PullRequest
0 голосов
/ 04 ноября 2019

Я хотел бы установить массив ящиков, каждый с именем и физическими размерами + неопределенность вокруг них. Я создал следующий класс:

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 }

Но как мне инициализировать класс Box? Я пробовал много способов, как показано в примере, но ни один из них не работает.

Ответы [ 5 ]

0 голосов
/ 04 ноября 2019

Прежде всего, пожалуйста, соблюдайте соглашение об именах, согласно которому имена переменных начинаются со строчной буквы.

И рекомендуется писать инициализаторы со значениями по умолчанию, а не присваивать их непосредственно свойствам

struct PhysUnit {
    var mean: Double
    var sigma: Double

    init(mean : Double = 0.0, sigma: Double = 0.0) {
        self.mean = mean
        self.sigma = sigma
    }
}

class Box {
    var name : String
    var width : PhysUnit
    var depth : PhysUnit
    var height : PhysUnit

    init(name : String, width : PhysUnit = PhysUnit(), depth : PhysUnit = PhysUnit(), height : PhysUnit = PhysUnit()) {
        self.name = name
        self.width = width
        self.depth = depth
        self.height = height
    }
}

func setupShelves() {
    let a1Box = Box(name: "A1", width: PhysUnit(mean: 40.0, sigma: 0.5))
    shelves.append(a1Box)
}
0 голосов
/ 04 ноября 2019

Вот, пожалуйста ...

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?
}

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

0 голосов
/ 04 ноября 2019

В вашем коде есть несколько ошибок.

  1. Дело важно. Используйте Box, а не box.
  2. Классы должны иметь инициализатор (структура должна создавать его для вас)
  3. Все необязательные свойства класса / структуры должны быть инициализированы, когдаэкземпляр инициализируется

Вероятно, структура будет более подходящей для вашей модели:

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)
}

Но если вы настаиваете на использовании класса, вы можете сделать это:

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)
}
0 голосов
/ 04 ноября 2019

Быстрый ответ:

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

0 голосов
/ 04 ноября 2019

Вы пишете поле (). Попробуйте это: var A1Box = Box ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...