[英]Is there a way to assign a variable of Swift enum type to a variable of NSObject type?
[英]iOS/Swift: Simple way to declare variable or property in NSObject
Swift的新手,我在一个单独的文件中创建了一个NSObject
类item.h
来跟踪我的项目。 每个项目都有各种属性。
在Objective-C中,我只需将属性声明为
@property(nonatomic) NSString *name;
等等在接口文件中。
我试图在Swift中创建类似的东西,如下所示:
import UIKit
class item: NSObject {
var topSpeed: Double
var aStrProperty: String
var anIntProperty: Int
}
但是,我得到了error: Class 'item' has no initializer
。 在Apple文档中,他们似乎建议创建一个结构,但我希望NSObject
将成为我物品的对象,就像我通常在Objective-C中所做的那样
如果有人可以解释给我对象属性的正确方法,将不胜感激。
在此先感谢您的任何建议。
在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!
如果要省略init方法,则Your Property Either应该具有默认值,或者它们是可选的。
如果您不想要它,则应创建所需的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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.