很抱歉这是我在Swift3中的第一个项目,我遇到了很多新手问题(我来自C:)
我正在尝试创建一个变量来存储在Arduino上运行的平台的属性。此代码通过BLE与Arduino交互。
平台由板(最多4个)组成,其中包含模块(最多4个)。 每个结构都有属性,我希望能够在执行代码时更改它们的值。
以下代码无法编译 - >错误:“Class'ViewController'没有初始值设定项”。
我理解我的结构声明缺乏定义(例如,默认声明了多少板或模块)但我看不出如何使其工作。
以下是我的问题:
有人知道如何让它以最小的变化发挥作用吗? (我不想换班,因为我不太懂他们的工作方式......)
我阅读了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
...
}