getter setter模型类Oop

时间:2016-02-09 13:53:54

标签: ios swift oop

你好,我是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。但是它说我们只有在有机会想要通过一些修改返回结果时才能使用它们。所以我想知道什么是最好的方法或标准方法来实现这个

3 个答案:

答案 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)

第1步

使用struct并丢弃NSObject部分,,除非有充分理由使用class之类的内容:

  • 您希望Objective-C兼容性
  • 您希望程序的多个部分操纵同一个对象
  • 您想使用继承

第2步

将属性声明为常量let,除非您需要在创建Trip值后更改它们。

第3步

声明optionals可能是nil

的属性

第4步

定义单个初始值设定项,并将默认值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")