在Swift类中获取和设置数组
我正在构建一个IOS应用程序,不知何故我必须在swift类中进行聚合,但每次我想要获取数据时,它总是返回一个错误。我觉得数据总是返回零结果 我想在视图控制器类中推送DoctorList成员对象(明细表) 我创建了对象,还调用了init()函数。但是,当我为DoctorList类推送(或调用)init函数并传递ScheduleList数组时,DoctorList类中的schedule成员的内容将始终为空 因此,当我尝试获取时间表时,它将返回一个零结果 每个人都能告诉我我做错了什么吗?因为我已经修改了代码,但结果仍然是零 我有两个这样的班在Swift类中获取和设置数组,swift,class,oop,Swift,Class,Oop,我正在构建一个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
- 不需要从
继承,除非您想要从ObjC世界中获得一些东西,无论是使用ObjC还是使用KVONSObject
计划
数组
循环中的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
- 不需要从
继承,除非您想要从ObjC世界中获得一些东西,无论是使用ObjC还是使用KVONSObject
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,所以我不知道名称约定。我很抱歉