2015-07-12 85 views
1

我目前正在学习Swift,正在试验数据结构。在可能的代码中,我有一些名字(String)和几个任务(String of Array)的例程。这些值在一个结构中。Swift - 追加到结构中的数组

所以我试图在数组初始化之后向数组添加另一个值。我的代码实际上工作,但我真的觉得它非常奇怪,不要认为,这是它应该完成的方式。

var routineMgr: routineManager = routineManager(); 
struct routine{ 
    var name = "Name"; 
    var tasks = [String](); 
} 

class routineManager: NSObject { 
var routines = [routine](); 

func addTask(name: String, desc: String){ 
    //init routines with name and an array with certain values, here "Hallo" & "Moin" 
    routines.append(routine(name: name, tasks: ["Hallo","Moin"])); 

//so i just put this part here to make the example shorter, but it would be in ad different function to make more sense 

    //adding a new value ("Salut") to the tasks array in the first routine 
    //getting current array 
    var tempArray = routines[0].tasks; 
    //appending new value to current value 
    tempArray.append("Salut"); 
    //replacing old routine with a copy (same name), but the new array (with the appended salut) 
    routines[0] = routine(name: routines[0].name, tasks: tempArray); 
} 
} 

我已经尝试了一些(我)“更正确”的方式,如:

routines[0].tasks.append("Salut"); 

但我总是得到吨的错误,我也说不明白。

所以我现在的问题是:它是如何正确地完成的?为什么第二种方式不起作用?

您的帮助和建议真的很感谢!

回答

3

您可以创建一个函数来追加结构中的值(这是我会做的)。你甚至可以用它来validade你需要追加之前做值或其他任何东西,它也可以返回一个布尔值,让你的代码知道如果该值已成功追加或不

var routineMgr: routineManager = routineManager(); 
struct routine{ 
    var name = "Name"; 
    var tasks = [String](); 

    mutating func addTask(task: String){ 
     tasks.append(task) 
    } 
} 

class routineManager: NSObject { 
var routines = [routine](); 

    func addTask(name: String, desc: String){ 
     routines.append(routine(name: name, tasks: ["Hallo","Moin"])); 
     routines[0].addTask("Salut") 
    } 
} 

我希望帮助

+0

谢谢@vacawama我想念那!我已经更新了答案 – Icaro