iOS/Swift:在NSObject中声明变量或属性的简单方法
作为Swift的新手,我在一个单独的文件中创建了一个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 }
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谢谢。我没有意识到这一点。