我试图创建一个class CalculatorBrain {
private var accumulator = 0.0
private var operations: Dictionary<String, Double> = [
"π": M_PI,
"√": sqrt(accumulator)
]
}
类型的变量,其中字典中的一个值是从该类型的实例变量计算的。
lazy
但是我遇到了以下错误。
无法使用实例成员&#39;累加器&#39;在属性初始化器内; 属性初始化程序在“自我”之前运行是可用的
我想也许这与Swift初始化顺序的工作方式有关,所以我在字典变量中添加了关键字class CalculatorBrain {
private var accumulator = 0.0
lazy private var operations: Dictionary<String, Double> = [
"π": M_PI,
"√": sqrt(accumulator)
]
}
,因此只有在使用它时才会初始化它。但是,这也不起作用。
为什么会出现错误以及如何使其发挥作用?
select mo.CardUId,mo.CarParkUId,mo.PersonUId,mo.CardType,mo.CardNr,pk.LastName company_name,ab.Name carpark_name,
mo.ValidFrom,mo.ValidUntil,mo.LastTccTime,p.LastName customerName,mo.GroupName, mo.Name,p.Type,
mo.LastTccNr,mo.DisplayableCardCarrierNrId serialnr,mo.BlacklistEntry,
mo.GroupNumber from Person p
LEFT outer join vwAllCards mo on p.PersonUId=mo.PersonUId
left outer join Person pk on pk.PersonUId=p.CompanyDepartmentUId
left outer join CarPark ab on ab.CarParkUId=mo.CarParkUId
where p.Type=0 and mo.Name is not null
order by p.LastName
答案 0 :(得分:1)
你应该指明字典在 init 时没有价值,但之后会有一个值。
在Swift中,所有变量必须初始化或标记为可选。
public class CalculatorBrain {
private var accumulator: Double = 0.0
lazy private var operations: [String: Double] = self.loadDictionary()
private func loadDictionary() -> [String: Double]
{
var operations: [String: Double] = [
"π": M_PI,
"√": sqrt(accumulator)
]
return operations
}
}