我在将可选值附加到Swift中的数组时遇到问题。我正在写的视图是为健身房创建例程的。但是,我的Routine对象没有被实例化。
我有其他编程语言的经验,但是我对Swift和Optionals还是很陌生。
我的ViewController包含一个可选变量:
var routine: Routine?
Routine类包含以下内容:
name: String
exerciseList: [String]()
numOfSets: [Int]()
当我准备将新创建的例程发送到其他ViewController时,我从用户输入中获取值来编辑对象的字段。
let name = routineName.text ?? ""
let numberOne = Int(numOfSetsOne.text ?? "0") //numOfSetsOne is a text label
routine?.exerciseList.append(selectedExerciseOne!) //Haven't tested to see if this works yet
routine?.numOfSets[0] = numberOne! //This line is not working
routine = Routine(name: name)
为了进行一些调试,我将打印语句放在行的两边,如下所示:
print ("numberOne Value: \(numberOne!)")
routine?.numOfSets[0] = numberOne!
print ("numOfSets[0] Value: \(routine?.numOfSets[0])")
我希望第二个print语句的输出与第一个相同。但是终端输出:
numberOne Value: 3
numOfSets[0] Value: nil
有人知道这里出了什么问题吗?
谢谢
最佳答案
您已经声明了可能包含Routine
的属性,但是在尝试使用该属性之前,尚未将Routine
实例分配给该属性。
例如,这意味着
routine?.numSets[0] = numberOne!
什么都不做-
routine
是nil
,因此该语句被跳过。您应该为
init
类创建一个适当的Routine
函数,并使用该函数创建一个新的Routine
并将其分配给routine
例如:
class Routine {
var name: String
var exerciseList = [String]()
var numberOfSets = [Int]()
init(named: String) {
self.name = named
}
}
那你可以说
let name = routineName.text ?? ""
let numberOne = Int(numOfSetsOne.text ?? "0")
self.routine = Routine(named: name)
self.routine?.numberOfSets.append(numberOne!)
协调相关的数组可能会有些混乱,因此我将使用单个数组:
struct ExerciseSet {
let exerciseName: String
let sets: Int
}
class Routine {
var name: String
var exerciseList = [ExerciseSet]()
init(named: String) {
self.name = named
}
}
关于ios - 如何在Swift中向数组添加可选值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55631661/