在Swift类中获取和设置数组

在Swift类中获取和设置数组,swift,class,oop,Swift,Class,Oop,我正在构建一个IOS应用程序,不知何故我必须在swift类中进行聚合,但每次我想要获取数据时,它总是返回一个错误。我觉得数据总是返回零结果 我想在视图控制器类中推送DoctorList成员对象(明细表) 我创建了对象,还调用了init()函数。但是,当我为DoctorList类推送(或调用)init函数并传递ScheduleList数组时,DoctorList类中的schedule成员的内容将始终为空 因此,当我尝试获取时间表时,它将返回一个零结果 每个人都能告诉我我做错了什么吗?因为我已经修改

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

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

因此,当我尝试获取时间表时,它将返回一个零结果

每个人都能告诉我我做错了什么吗?因为我已经修改了代码,但结果仍然是零

我有两个这样的班

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中生成全局变量?

您还没有初始化
计划
数组

循环中的
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!))
}
此外,您的代码阅读起来也很痛苦:

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

您尚未初始化
计划
数组

循环中的
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!))
}
此外,您的代码阅读起来也很痛苦:

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

刚刚注意到,@CodeDifferent的建议应该是适当和有用的。 这是因为您没有在
DoctorList

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)")
}

刚刚注意到,来自@CodeDifferent的建议应该是适当和有用的。 这是因为您没有在
DoctorList

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)")
}

仅供参考-以小写字母开头命名变量和方法是标准的。类和结构名称以大写字母开头。除非您有明确和具体的需要,否则不应该让Swift类扩展
NSObject
。此外,似乎没有任何理由让
DoctorList
ScheduleList
类的属性成为可选属性。它们都是在
init
method.FYI中设置的-标准的命名方法是以小写字母开头的变量和方法。类和结构名称以大写字母开头。除非您有明确和具体的需要,否则不应该让Swift类扩展
NSObject
。此外,似乎没有任何理由让
DoctorList
ScheduleList
类的属性成为可选属性。它们都是在
init
方法中设置的。感谢您的建议,因为这是我第一次使用swift,所以我不知道名称约定。很抱歉,谢谢你的建议,因为这是我第一次使用swift,所以我不知道名称约定。我很抱歉