我是 Swift 的新手,正在尝试创建和使用类,但我收到一个错误:"调用中缺少参数'time'的参数"有人可以指出我正确的方向吗? 我在苹果网站上看了一些样本,但没有运气。任何建议将不胜感激。谢谢!布莱恩
这是我的班级:
class CurrentSevereReportModel {
var time: NSDate?
var magnitude: String?
var location: String?
var county: String?
var remarks: String?
var lat: NSNumber?
var lon: NSNumber?
var type: NSNumber?
var reportid: NSNumber?
init(time: NSDate, magnitude: String, location: String, county: String, remarks: String, lat: NSNumber, lon: NSNumber, type: NSNumber, reportid: NSNumber) {
self.time = time
self.magnitude = magnitude
self.location = location
self.county = county
self.remarks = remarks
self.lat = lat
self.lon = lon
self.type = type
self.reportid = reportid
}
}
这是我尝试使用它并收到错误的方式:"调用中缺少参数'time'的参数"
var records: [CurrentSevereReportModel]
func buildRecord(data : [String : String], type : Int, index:Int)
{
let record = CurrentSevereReportModel() // <-- error here
var timeDate = data[reportHeaders[0]]!
let length = timeDate.characters.count
if (length > 4)
{
let index1 = timeDate.endIndex.advancedBy(-4)
timeDate = timeDate.substringFromIndex(index1)
}else if (length < 4)
{
let restCount = 4 - length
var index: Int = 0
for index = 0; index < restCount; index++
{
timeDate = "0" + timeDate
}
}
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyMMddHHmm"
record.time = dateFormatter.dateFromString(timeDate)
record.type = type
record.magnitude = data[reportHeaders[1]]!
record.location = data[reportHeaders[2]]!
record.county = data[reportHeaders[3]]!
record.remarks = data[reportHeaders[4]]!
record.lat = Double(data[reportHeaders[5]]!)
record.lon = Double(data[reportHeaders[6]]!)
record.comments = data[reportHeaders[7]]!
record.reportid = index
print(record.reportid)
records.append(record)
}
我真的不认为以这种方式进行初始化是一个好主意。几个论点:
- 您一开始创建的对象没有参数,并且您没有在任何地方使用它。那么为什么要这么早就创建它呢?
- 您正在使变量成为可选变量。这意味着在这个例子中它们可以为零 - 这真的是你的意思吗?根据我在这里看到的内容,您应该将它们设置为非可选变量并使用您在课堂上编写的初始值设定项。它确实更安全,并且使类更容易使用(因为您确定变量存在并且非零。
如果你真的需要这种行为(我强烈建议不要这样做),并且你正在寻找摆脱错误,只需创建空的初始值设定项: init() {}
它会完成工作。
初始值设定项已定义:
init(time: NSDate, magnitude: String, location: String, county: String,
remarks: String, lat: NSNumber, lon: NSNumber, type: NSNumber,
reportid: NSNumber) {
这意味着您必须按照定义的方式调用它:
let record = CurrentSevereReportModel(time: someDate, magnitude: someString,
// ... and so on ...
)