从初始化程序返回而不初始化所有存储的属性错误

时间:2015-10-06 19:11:43

标签: swift

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个类

  1. 设备 - 类 设备ID - 整数 类型 - DeviceType 操作系统 - OperatingSystem 用户ID - Int 描述 - 字符串 库存编号 - 字符串

2 个答案:

答案 0 :(得分:1)

错误表示您从init返回而未初始化所有存储的属性。这就是问题所在。您需要在Type中初始化OperatingSysteminit

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)

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html

  

初始化

     

初始化是准备实例的过程   要使用的类,结构或枚举。这个过程涉及到   为该实例上的每个存储属性设置初始值   执行之前需要的任何其他设置或初始化   新实例已准备就绪。

     

通过定义初始值设定项来实现此初始化过程,   这就像可以调用创建新的特殊方法   特定类型的实例。与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 
}