Swift - инициализация переменной типа структурных массивов

Извините, это мой первый проект в Swift3, и я задал много вопросов новичкам (я из C:)

Я пытаюсь создать переменную для хранения свойств для платформы, которая работает на Arduino. Этот код взаимодействует с Arduino через BLE.

Платформа изготовлена ​​из досок (до 4), которые содержат модули (до 4). Каждая структура имеет свойства, и я хочу иметь возможность изменять их значения во время выполнения кода.

Приведенный ниже код не компилируется -> Ошибка: "У класса 'ViewController' нет инициализаторов".

Я понимаю, что в моем объявлении структуры отсутствует определение (например, сколько плат или модулей объявлено по умолчанию), но я не понимаю, как заставить его работать.

Вот мои вопросы:

  1. Кто-нибудь знает, как заставить его работать с минимальными изменениями? (Я не хотел бы переключаться на класс, потому что я меньше понимаю, как они работают...)

  2. Я прочитал страницу Swift [Initialization][1], и большинство их примеров используют "let" вместо "var". Если я использую 'let' для объявления, я не могу изменить значения свойств позже в коде... я что-то упускаю при использовании переменной?

Спасибо!

в ViewController.swift:

class ViewController: UIViewController
{
    struct moduleStruct
    {
        var address: UInt8 = 0
        var status: UInt8 = 0
        var settings: [UInt8] = [0,0,0,0,0,0];
        var temp: Double = 0.0
    }

    struct boardStruct
    {
        var type: UInt8 = 0
        var module: [moduleStruct]
    }

    struct platformStruct
    {
        var firmwareRevision: String = "0.0"
        var board: [boardStruct]
    }

    var myPlatform : platformStruct

    override func viewDidLoad()
    {
        super.viewDidLoad()

        ...

        // example of use
        myPlatform.board[1].module[0].type = 3

        ...
    }

=== 4/3/17 РЕДАКТИРОВАТЬ - РАБОЧЕЕ РЕШЕНИЕ ===

struct moduleStruct
{
    var address: UInt8 = 0
    var status: UInt8 = 0
    var settings: [UInt8] = [0,0,0,0,0,0];
    var temp: Float = 0.0

    init () {}
}

struct boardStruct
{
    var type: UInt8 = 0
    var module : [moduleStruct] = []

    init ()
    {
        let emptyModule = moduleStruct()
        self.module.append(emptyModule)
        self.module.append(emptyModule)
        self.module.append(emptyModule)
        self.module.append(emptyModule)
    }
}

struct platformStruct
{
    var firmwareRevision: String = "0.0"
    var board : [boardStruct] = []

    init ()
    {
        let emptyBoardStruct = boardStruct()
        self.board.append(emptyBoardStruct)
        self.board.append(emptyBoardStruct)
        self.board.append(emptyBoardStruct)
        self.board.append(emptyBoardStruct)
    }
}

var myPlatform : platformStruct = platformStruct()

override func viewDidLoad()
{
    super.viewDidLoad()

    ...

    // example of use
    myPlatform.board[1].module[0].type = 3

    ...
}

0 ответов

Другие вопросы по тегам