你好,我是IOS和oop编程的新手,所以我想知道应该用什么方法或标准的方法来实现这个目标。
我声明像这样的Model类
class Trip: NSObject {
var tripTitle: String
var tripSummary: String
var fee: Int
var departureCountry: String
init(userName: String,tripTitle: String, tripSummary: String,fee: Int, departureCountry: String) {
self.tripTitle = tripTitle
self.tripSummary = tripSummary
self.fee = fee
self.departureCountry = departureCountry
}
}
在控制器类中,我首先设置这些变量的值,然后获取从类对象设置的值。现在我有一种情况,我想只设置这些类的几个变量而不是全部。因此,每当我想设置几个变量时,我必须在类对象的参数中发送空值。所以我想知道如何定义自己的构造函数,或者我是否可以在没有构造函数的情况下执行此操作。
我对谷歌进行了一些研究,我发现了computed properties
getter setter
。但是它说我们只有在有机会想要通过一些修改返回结果时才能使用它们。所以我想知道什么是最好的方法或标准方法来实现这个
答案 0 :(得分:0)
如果我错了,请纠正我,但根据我对你的问题的解释,你希望有时带一些参数,有时和其他人一起开课。
如果您有很多情况需要输入两个或三个不同的参数而不是其他参数,则可以向" Trip"添加其他init()函数。类。
例如,如果您知道有时您只有一个userName和tripTitle参数传递给该类,您可以创建另一个init()函数,如下所示:
class Trip: NSObject {
var tripTitle: String
var tripSummary: String?
var fee: Int?
var departureCountry: String?
init(userName: String,tripTitle: String, tripSummary: String,fee: Int, departureCountry: String) {
self.tripTitle = tripTitle
self.tripSummary = tripSummary
self.fee = fee
self.departureCountry = departureCountry
}
init(userName: String,tripTitle: String){
self.tripTitle = tripTitle
}
请注意,为了安全地执行此操作,您必须在启动时将tripSummary,fee和departureCountry标记为选项。
答案 1 :(得分:0)
您可以通过init
方法
class Trip: NSObject {
var userName: String
var tripTitle: String
var tripSummary: String
var fee: Int
var departureCountry: String
init(userName: String = "", tripTitle: String = "" , tripSummary: String = "" , fee: Int = 0, departureCountry: String = "USA") {
self.userName = userName
self.tripTitle = tripTitle
self.tripSummary = tripSummary
self.fee = fee
self.departureCountry = departureCountry
}
}
现在您可以通过这种方式调用初始化程序
let trip = Trip(userName:"John", fee: 12)
userName
设置为John,fee
设置为12,所有其他属性设置为默认值
或者您在声明行中指定默认值,那么您甚至不需要初始化程序
class Trip: NSObject {
var userName = ""
var tripTitle = ""
var tripSummary = ""
var fee = 0
var departureCountry = "USA"
}
let trip = Trip()
trip.userName = "John"
trip.fee = 12
你可以对选项做同样的事情。
答案 2 :(得分:0)
使用struct
并丢弃NSObject
部分,,除非有充分理由使用class
之类的内容:
Objective-C
兼容性将属性声明为常量let
,除非您需要在创建Trip值后更改它们。
声明optionals
可能是nil
定义单个初始值设定项,并将默认值nil values
添加到可能为nil
的参数中。这将允许您在创建值时使用param的每个组合和默认值(请查看下面的示例)。
struct Trip {
let tripTitle: String
let tripSummary: String?
let fee: Int?
let departureCountry: String?
init(tripTitle: String, tripSummary:String?=nil, fee:Int?=nil, departureCountry:String?=nil) {
self.tripTitle = tripTitle
self.tripSummary = tripSummary
self.fee = fee
self.departureCountry = departureCountry
}
}
let rome = Trip(tripTitle: "Rome")
let london = Trip(tripTitle: "London", tripSummary: "A nice holiday")
let berlin = Trip(tripTitle: "Berlin", fee: 100)
let madrid = Trip(tripTitle: "Madrid", departureCountry: "Italy")