2016-09-13 2 views
0

Я столкнулся с тем, что может показаться чрезвычайно простой проблемой для решения, и я думаю, что я могу что-то упустить.Определения рекурсивного типа в Swift

Программа вылетает при попытке создать рекурсивную переменную (?) С типизированным классом, будучи членом указанного класса. Например:

class A { 
    var x: A 

    init() { 
     x = A() 
    } 
} 

Проверка журнала аварии предполагает рекурсию рода, с init() называют бесконечно.

Есть ли правильный метод/синтаксис для решения такого рода проблемы, учитывая, что мне нужна переменную x быть набран в класс A и инициализатор должен инициализировать переменную x к классу A?

+3

Нормальная бесконечная рекурсия, что вызывает переполнение стека. Здесь ничего плохого :) – Avt

ответ

2

Совершенно очевидно, что на каком-то этапе вы должны оставили свойство x неинициализированный. Таким образом, тот лучше объявить его как Optional, и инициализировать его после того, как экземпляр был создан:

class A { 
    var x: A? 
} 

let mainObject = A() 
let nestedObject = A() 
mainObject.x = nestedObject 
1

Не уверен, но я думаю, что вы ищете для этого

class A { 
    var x: A? 

    init() { 
    } 

    anothermethod() { 
     x = A() 
    } 
} 

и вы можете вызвать этот метод, как

let a = A() 
    a.anothermethod()