【问题标题】:Get and Set Array in Swift Class在 Swift 类中获取和设置数组
【发布时间】:2017-06-22 01:11:26
【问题描述】:

我正在构建一个 IOS 应用程序,不知何故我必须在 swift 类中进行聚合,但每次我想获取数据时,它总是返回错误。好像我的数据总是返回 nil 结果。

我想在视图控制器类中推送 DoctorList 成员对象(调度) 我已经创建了对象,并且还调用了 init() 函数。但是,当我推送(或调用)DoctorList 类的init 函数并传递ScheduleList 数组时, DoctorList 类中的schedule 成员的内容将始终为空。

所以当我尝试获取时间表时,它会返回 nil 结果。

每个人都可以告诉我我做错了什么,因为我已经更改了代码但它仍然给出 nil 结果。

我有两个这样的班级

class DoctorList: NSObject {
var DoctorID: String?
var DoctorName: String?
var SpecialtyID: String?
var SpecialtyName: String?
var ImageURL: String?
var Schedule: [ScheduleList]?

init(_ DoctorID:String, _ DoctorName:String, _ SpecialtyID:String, _ SpecialtyName:String, _ ImageUrl:String, _ Schedule:[ScheduleList] ){
    self.DoctorID = DoctorID
    self.DoctorName = DoctorName
    self.SpecialtyID = SpecialtyID
    self.SpecialtyName = SpecialtyName
    self.ImageURL = ImageUrl
    for sc in Schedule {
        self.Schedule?.append(ScheduleList(sc.DoctorID!, sc.DayName!, sc.FirstHour!, sc.LastHour!))
    }

}

var getSchedule: [ScheduleList] {
    get {
        return self.Schedule!
    }

}

还有这个

class ScheduleList: NSObject {
var DoctorID: String?
var DayName: String?
var FirstHour: String?
var LastHour: String?

init(_ DoctorID:String, _ DayName:String, _ FirstHour:String, _ LastHour:String ){
    self.DoctorID = DoctorID
    self.DayName = DayName
    self.FirstHour = FirstHour
    self.LastHour = LastHour
}

计划的返回值始终为空

对不起,谁能给一个建议,如何在 swift 中创建一个全局变量?

【问题讨论】:

  • 仅供参考 - 命名变量和方法以小写字母开头是标准的。类和结构名称以大写字母开头。
  • 而且你不应该让你的 Swift 类扩展 NSObject,除非你有明确和具体的需要。
  • 此外,您的DoctorListScheduleList 类的属性似乎没有任何理由是可选的。它们都在init 方法中设置。

标签: swift class oop


【解决方案1】:

您尚未初始化 Schedule 数组。

循环中的append 语句永远不会执行:

for sc in Schedule {
    // self.Schedule is nil so anything come after the question mark does not run
    self.Schedule?.append(ScheduleList(sc.DoctorID!, sc.DayName!, sc.FirstHour!, sc.LastHour!))
}

要修复它,请在使用前初始化您的数组:

self.Schedule = [ScheduleList]()
for sc in Schedule {
    self.Schedule?.append(ScheduleList(sc.DoctorID!, sc.DayName!, sc.FirstHour!, sc.LastHour!))
}

另外,你的代码读起来很痛苦:

  • 到处都是可选的!您应该决定哪些属性可以和不能为 nil,并摆脱不必要的 ?!
  • Swift 中的约定是 lowerCamelCase 用于变量名,CamelCase 用于类名
  • 无需从 NSObject 继承,除非您想从 ObjC 世界中获得一些东西,无论是使用 ObjC 还是使用 KVO

【讨论】:

  • 谢谢你的建议,因为这是我第一次使用swift,所以我不知道nameConvention。对不起
【解决方案2】:

刚刚注意到,来自@CodeDifferent 的建议应该是适当且有用的。 这是因为你还没有初始化DoctorList中的Schedule

init(_ DoctorID:String, _ DoctorName:String, _ SpecialtyID:String, _ SpecialtyName:String, _ ImageUrl:String, _ Schedule:[ScheduleList] ){
        self.DoctorID = DoctorID
        self.DoctorName = DoctorName
        self.SpecialtyID = SpecialtyID
        self.SpecialtyName = SpecialtyName
        self.ImageURL = ImageUrl

        // Use this for init an empty array and append the content
        self.Schedule = [ScheduleList]()
        self.Schedule?.append(contentsOf: Schedule)
    }

结果示例:

let schedule = ScheduleList("scheduleId", "name", "1st", "last")
let doctorList = DoctorList("docId", "docName", "specId", "scpecName", "imgURL", [schedule])
if let list = doctorList.Schedule {
    print("\(list[0].DoctorID)")
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多