繁体   English   中英

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

[英]iOS/Swift: Simple way to declare variable or property in NSObject

Swift的新手,我在一个单独的文件中创建了一个NSObjectitem.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)

您应该尽可能使用Structs,请阅读此处文档以获取每种说明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM