尝试访问另一个类型&#34; Dictionary <string,double =“”>&#34;的另一个变量中的实例变量时出错。

时间:2017-03-14 08:20:21

标签: ios iphone swift dictionary

我试图创建一个class CalculatorBrain { private var accumulator = 0.0 private var operations: Dictionary<String, Double> = [ "π": M_PI, "√": sqrt(accumulator) ] } 类型的变量,其中字典中的一个值是从该类型的实例变量计算的。

lazy

this answer

但是我遇到了以下错误。

  

无法使用实例成员&#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

enter image description here

1 个答案:

答案 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
    }
}