Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Swift 4中将数据读入对象数组_Swift_Class - Fatal编程技术网

如何在Swift 4中将数据读入对象数组

如何在Swift 4中将数据读入对象数组,swift,class,Swift,Class,我有一个类别Employee,其属性为id、nam和salary。函数getInfo()用于从用户获取信息。我想读取数据直到标志=“y”。我得到的索引超出范围错误 输入数据的正确方式是什么?我们可以为这些对象编制索引吗 您需要附加到数组中以使其增大大小。替换 class Employee{ var id:Int var name:String var salary:Int init(){ self.id=0 self.name="

我有一个类别
Employee
,其属性为
id
nam
salary
。函数
getInfo()
用于从用户获取信息。我想读取数据直到
标志=“y”
。我得到的索引超出范围错误

输入数据的正确方式是什么?我们可以为这些对象编制索引吗


您需要附加到数组中以使其增大大小。替换

class Employee{
    var id:Int
    var name:String
    var salary:Int

    init(){
        self.id=0
        self.name=""
        self.salary=0
    }

    func getInfo(){
        self.name=readLine()!
        self.id=Int(readLine()!)!
        self.salary=Int(readLine()!)!
    }
}


var count=0
var flag="y"
var empData:[Employee]=[]
repeat{
    count+=1
    empData[count]=Employee()
    empData[count].getInfo()
    flag=readLine()!

}while(flag=="y") `

避免索引超出范围错误

更新

为了让你的代码不那么可怕,我会

empData.append(Employee())

下标运算符不能用于向尚不存在的数组索引添加元素。如果在初始化时知道数组将有多少个元素,则需要使用元素计数初始化数组,或者使用
append
操作符在最后一个索引之后向数组添加新元素

您甚至不需要
count
变量,因为您可以简单地访问
empData。在调用
append
并向
数组添加新的
Employee
后,安全地执行最后一次

repeat {
    var employee = Employee()
    employee.getInfo()
    empData.append(employee)
    flag=readLine()!
}while( flag == "y" ) 
我建议你认真地重新考虑你的实施,因为它目前确实不安全。您没有以任何方式验证用户输入,因此如果用户输入不是预期的形式,则
getInfo
函数很容易导致运行时错误。此外,为
员工
创建一个空的初始值设定项是没有意义的,您可以简单地创建一个失败的初始值设定项,在其中读取输入,如果输入的形式不正确,则使初始值设定项返回
nil

var flag="y"
var empData:[Employee]=[]
repeat {
    empData.append(Employee())
    empData.last!.getInfo()
    flag=readLine()!
} while(flag=="y")
var flag="y"
var empData:[Employee]=[]
repeat {
    empData.append(Employee())
    empData.last!.getInfo()
    flag=readLine()!
} while(flag=="y")
class Employee{
    let id:Int
    let name:String
    let salary:Int

    init?(){
        guard let name = readLine() else { return nil }
        self.name = name
        guard let idString = readLine(), let id = Int(idString) else { return nil }
        self.id = id
        guard let salaryString = readLine(), let salary = Int(salaryString) else { return nil}
        self.salary = salary
    }
}

var flag="y"
var empData:[Employee]=[]
repeat {
    if let employee = Employee() {
        empData.append(employee)
    } else {
        // Display error message to the user
    }
    flag=readLine() ?? ""
} while(flag=="y")