import UIKit
enum DeviceType {
case Phone, Tablet, Watch
}
enum OperatingSystemType {
case iOS, Android, Windows
}
struct OperatingSystemVersion {
var Major: Int
var Minor: Int
var Patch: Int
}
struct OperatingSystem{
var type: OperatingSystemType
var version: OperatingSystemVersion
}
class Device {
var DeviceID: Int
var Type: DeviceType
var Operating_System: OperatingSystem
var UserID: Int
var Description: String
var InventoryNR: String
init () {
DeviceID = 1233
UserID = 2
Description = "took"
InventoryNR = "no17"
}
}
//我似乎无法克服这个问题。我只想创建2个枚举,2个结构和2个类
答案 0 :(得分:1)
错误表示您从init
返回而未初始化所有存储的属性。这就是问题所在。您需要在Type
中初始化OperatingSystem
和init
:
init () {
DeviceID = 1233
Type = .Phone
Operating_System = OperatingSystem(type: .iOS, version: OperatingSystemVersion(Major: 9, Minor: 0, Patch: 2))
UserID = 2
Description = "took"
InventoryNR = "no17"
}
将来,请在发布前阅读错误消息。
答案 1 :(得分:0)
初始化
初始化是准备实例的过程 要使用的类,结构或枚举。这个过程涉及到 为该实例上的每个存储属性设置初始值 执行之前需要的任何其他设置或初始化 新实例已准备就绪。
通过定义初始值设定项来实现此初始化过程, 这就像可以调用创建新的特殊方法 特定类型的实例。与Objective-C初始化器不同,Swift 初始值设定项不返回值。他们的主要作用是确保 一个类型的新实例在它们之前被正确初始化 这是第一次使用。
类类型的实例也可以实现deinitializer 在该类的实例之前执行任何自定义清理 释放。有关取消初始化的详细信息,请参阅 去初始化。
设置存储属性的初始值
类和结构必须将其所有存储属性设置为 适当的初始值,当该类的实例或 结构已创建。存储的属性不能留在 不确定状态。
您可以为其中的存储属性设置初始值 初始化程序,或通过指定默认属性值作为一部分 财产的定义。以下描述了这些操作 部分。强>
请注意
为存储的属性分配默认值或设置其值时 初始化程序中的初始值,设置该属性的值 直接,不要求任何财产观察员。
初始值设定
调用初始化程序以创建特定类型的新实例。 在最简单的形式中,初始化器就像一个实例方法 没有参数,使用init关键字编写:
init() { // perform some initialization here }
下面的示例定义了一个名为Fahrenheit的新结构,用于存储表示的温度 华氏度。华氏温度结构有一个存储属性, 温度,类型为Double:
struct Fahrenheit { var temperature: Double init() { temperature = 32.0 } } var f = Fahrenheit() print("The default temperature is \(f.temperature)° Fahrenheit") // prints "The default temperature is 32.0° Fahrenheit"
该结构定义了一个没有参数的初始化器init,它用a初始化存储的温度 值为32.0(用水表示的水的冰点) 华氏度)。
默认属性值
您可以在a中设置存储属性的初始值 初始化程序,如上所示。或者,指定默认属性 价值作为财产声明的一部分。您指定默认值 属性值,通过为属性赋值初始值 是定义。
请注意
如果属性始终采用相同的初始值,请提供默认值 值而不是在初始值设定项中设置值。结束 结果是相同的,但默认值绑定属性的 初始化更接近其声明。它缩短了, 更清晰的初始化程序,使您能够推断属性的类型 从它的默认值。默认值也使您更容易 利用默认初始化器和初始化器继承, 如本章后面所述。
你可以用更简单的形式从上面写出华氏温度结构 在该点为其温度属性提供默认值 该财产被宣布:
struct Fahrenheit { var temperature = 32.0 }