Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS/Swift:在NSObject中声明变量或属性的简单方法_Ios_Swift_Variables - Fatal编程技术网

iOS/Swift:在NSObject中声明变量或属性的简单方法

iOS/Swift:在NSObject中声明变量或属性的简单方法,ios,swift,variables,Ios,Swift,Variables,作为Swift的新手,我在一个单独的文件中创建了一个NSObject类,item.h,以跟踪我的物品。每个项目都有分类属性 在Objective-C中,我会将属性声明为 @属性(非原子)NSString*名称等 我尝试在Swift中创建类似的内容,如下所示: import UIKit class item: NSObject { var topSpeed: Double var aStrProperty: String var anIntProperty: Int }

作为Swift的新手,我在一个单独的文件中创建了一个
NSObject
类,
item.h
,以跟踪我的物品。每个项目都有分类属性

在Objective-C中,我会将属性声明为

@属性(非原子)NSString*名称

我尝试在Swift中创建类似的内容,如下所示:

import UIKit

class item: NSObject {
    var topSpeed: Double
    var aStrProperty: String
    var anIntProperty: Int
}
但是,我得到了
错误:类“item”没有初始值设定项。在Apple文档中,他们似乎建议创建一个结构,但我希望
NSObject
将成为我的项目的对象,就像我在Objective-C中通常做的那样

如果有人能解释给我的对象属性的正确方法,我将不胜感激


提前感谢您的建议。

如果您想省略init方法,那么您的属性应该具有默认值或者是可选的


如果不需要,则应创建所需的init方法来初始化所有属性

如果要省略init方法,则属性应具有默认值或为可选值


如果您不想要它,那么您应该创建必需的init方法来初始化所有属性

您必须为属性设置一些默认值。实现这一点有多种方法。 或者创建一个init方法来分配这些默认值

class item: NSObject {
    var topSpeed: Double
    var aStrProperty: String
    var anIntProperty: Int

    override init() {
        topSpeed = 120.0
        aStrProperty = "aStrValue"
        anIntProperty = 1
    }
}
也可以直接在类中指定值

class item: NSObject {
    var topSpeed: Double = 120.0
    var aStrProperty: String = "aStrValue"
    var anIntProperty: Int = 1
}
或者将您的属性标记为可选。然后,在使用每个属性时,必须将其展开

class item: NSObject {
    var topSpeed: Double?
    var aStrProperty: String?
    var anIntProperty: Int?
}


如果你想使用结构。init方法是自动为您创建的。

您的属性必须有一些默认值。实现这一点有多种方法。 或者创建一个init方法来分配这些默认值

class item: NSObject {
    var topSpeed: Double
    var aStrProperty: String
    var anIntProperty: Int

    override init() {
        topSpeed = 120.0
        aStrProperty = "aStrValue"
        anIntProperty = 1
    }
}
也可以直接在类中指定值

class item: NSObject {
    var topSpeed: Double = 120.0
    var aStrProperty: String = "aStrValue"
    var anIntProperty: Int = 1
}
或者将您的属性标记为可选。然后,在使用每个属性时,必须将其展开

class item: NSObject {
    var topSpeed: Double?
    var aStrProperty: String?
    var anIntProperty: Int?
}


如果你想使用结构。init方法是自动为您创建的。

类中的属性未声明为可选(因此不能为nil),并且没有初始值。所以在初始化器中,需要给这些属性一个值

如果要使用结构而不是类,则会自动获得初始化器方法:

struct Item {
    var topSpeed: Double
    var aStrProperty: String
    var anIntProperty: Int
}

let item = Item(topSpeed: 200, aStrProperty: "Car", anIntProperty: 2)
但是对于一个类,您需要自己实现它:

class Item: NSObject {
    var topSpeed: Double
    var aStrProperty: String
    var anIntProperty: Int

    init(speed: Double, str: String, int: Int) {
        topSpeed = speed
        aStrProperty = str
        anIntProperty = int

        super.init()
    }
}

let item = Item(speed: 200, str: "Car", int: 2)

您应该尽可能使用结构,请阅读以了解每种结构的解释。

类中的属性未声明为可选(因此不能为nil),并且没有初始值。所以在初始化器中,需要给这些属性一个值

如果要使用结构而不是类,则会自动获得初始化器方法:

struct Item {
    var topSpeed: Double
    var aStrProperty: String
    var anIntProperty: Int
}

let item = Item(topSpeed: 200, aStrProperty: "Car", anIntProperty: 2)
但是对于一个类,您需要自己实现它:

class Item: NSObject {
    var topSpeed: Double
    var aStrProperty: String
    var anIntProperty: Int

    init(speed: Double, str: String, int: Int) {
        topSpeed = speed
        aStrProperty = str
        anIntProperty = int

        super.init()
    }
}

let item = Item(speed: 200, str: "Car", int: 2)

您应该尽可能使用结构,请阅读以了解每种结构的解释。

在Swift中,所有属性在初始化时都必须有一个值。目前,您尚未指定属性的值

为什么不听听错误所说的话并添加一个初始化器呢

class item: NSObject {
    var topSpeed: Double
    var aStrProperty: String
    var anIntProperty: Int

    init(topSpeed: Double, aStrProperty: String, anIntProperty: Int) {
        self.topSpeed = topSpeed
        self.aStrProperty = aStrProperty
        self.anIntProperty = anIntProperty
    }
}
或者,您可以添加一个
使其成为所有选项。这样,您就可以将所有属性的初始值设置为
nil

var topSpeed: Double!
var aStrProperty: String!
var anIntProperty: Int!

在Swift中,所有属性在初始化时都必须有一个值。目前,您尚未指定属性的值

为什么不听听错误所说的话并添加一个初始化器呢

class item: NSObject {
    var topSpeed: Double
    var aStrProperty: String
    var anIntProperty: Int

    init(topSpeed: Double, aStrProperty: String, anIntProperty: Int) {
        self.topSpeed = topSpeed
        self.aStrProperty = aStrProperty
        self.anIntProperty = anIntProperty
    }
}
或者,您可以添加一个
使其成为所有选项。这样,您就可以将所有属性的初始值设置为
nil

var topSpeed: Double!
var aStrProperty: String!
var anIntProperty: Int!

@清扫器是有理由使用的!而不是例如,我有点不清楚topSpeed是如何为零并展开的,或者它仍然是可选的。?谢谢您的澄清。@Marcy请看这里:@Sweeper谢谢。我不知道。@Sweeper有理由使用它吗!而不是例如,我有点不清楚topSpeed是如何为零并展开的,或者它仍然是可选的。?谢谢您的澄清。@Marcy请看这里:@Sweeper谢谢。我没有意识到这一点。