Swift - 初始化结构数组类型的变量

时间:2017-02-25 22:53:28

标签: arrays swift structure initializer

很抱歉这是我在Swift3中的第一个项目,我遇到了很多新手问题(我来自C:)

我正在尝试创建一个变量来存储在Arduino上运行的平台的属性。此代码通过BLE与Arduino交互。

平台由板(最多4个)组成,其中包含模块(最多4个)。 每个结构都有属性,我希望能够在执行代码时更改它们的值。

以下代码无法编译 - >错误:“Class'ViewController'没有初始值设定项”。

我理解我的结构声明缺乏定义(例如,默认声明了多少板或模块)但我看不出如何使其工作。

以下是我的问题:

  1. 有人知道如何让它以最小的变化发挥作用吗? (我不想换班,因为我不太懂他们的工作方式......)

  2. 我阅读了Swift [Initialization] [1]页面,他们的大多数示例使用'let'而不是'var'。如果我使用'let'作为声明我不能在代码中稍后更改属性值...我在使用变量时遗漏了什么?

  3. 谢谢!

    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 个答案:

没有答案