2015-07-31 5 views
0

Я довольно новичок в программировании Swift и iOS и имею только грубое понимание классов и объектов.Создание массива объектов внутри класса

Вот соответствующий код:

class Step { 
    var notation: String 
    init (notation: String) { 
     self.notation = notation 
    } 
} 

class AlgorithmMaker { 
    let F = Step(notation: "F") 
    let Fi = Step(notation: "F'") 
    let F2 = Step(notation: "F2") 
    var frontArray = [F, Fi, F2] 
} 

Я пытаюсь создать массив объектов из класса «Шаг» внутри моего класса AlgorithmMaker. Однако Xcode продолжает давать мне ошибку:

«AlgorithmMaker.Type» не имеет элемент с именем «F»

ответ

0

Заменить все в этом классе с:

var frontArray = [Step(notation: "F"), Step(notation: "F'"), Step(notation: "F2")] 

Или заменить frontArray с var frontArray : [Step] = [] и добавить:

override init() { 
    frontArray = [F, Fi, F2] 
} 

Проблема заключается в том, что объявление frontArray, как [F, Fi, F2] технически часть логики, то есть вы можете Не ставьте его вне метода класса.

0

Это связано с тем, что вы не можете вызывать другие свойства во время инициализации, и вы делаете это внутри.

0

Когда вы об инициализации членов класса текущей Областью видимости является класс сфера, поэтому, когда вы делаете

var frontArray = [F, Fi, F2] 

вы фактически делаете

var frontArray = [self.F, self.Fi, self.F2] 

и self является класса в этой области, то есть AlgorithmMaker в этом случае.

В качестве решения можно использовать инициализатор и сделать

class AlgorithmMaker { 
    let f = Step(notation: "F") 
    let fi = Step(notation: "F'") 
    let f2 = Step(notation: "F2") 
    var frontArray: [Step] 

    init() { 
    frontArray = [f, fi, f2] 
    } 
}