член экземпляра не может использоваться при ошибке типа в Swift 4 с вложенными классами

У меня есть класс с вложенным классом. Я пытаюсь получить доступ к переменным внешнего класса из вложенного класса:

class Thing{
    var name : String?
    var t = Thong()

    class Thong{
        func printMe(){
            print(name) // error: instance member 'name' cannot be used on type 'Thing'
        }
    }

}

Однако это дает мне следующую ошибку:

«имя» члена экземпляра не может использоваться для типа «Вещь»

Есть ли элегантный способ обойти это? Я надеялся, что вложенные классы захватят лексическую область видимости, как это делают замыкания.

Спасибо


person Charles Fisher    schedule 25.07.2017    source источник
comment
в отличие от вложенных классов Java Swift автоматически не имеют ссылки на внешний класс   -  person Steve    schedule 25.07.2017


Ответы (2)


вы могли бы сделать что-то вроде этого

class Thing{
    var name : String = "hello world"
    var t = Thong()

    init() {
        t.thing = self
        t.printMe()
    }


    class Thong{
        weak var thing: Thing!

        func printMe(){
            print(thing.name)
        }
    }

}
person Steve    schedule 25.07.2017
comment
Я думаю, вы хотели сделать var t = Thong(t: self) - person Paolo; 25.07.2017
comment
@CharlesFisher извините за это. Обновлен ответ - person Steve; 26.07.2017
comment
Какой круг ссылок! Не забудьте обнулить thing, когда он вам больше не нужен, чтобы иметь возможность деинициировать оба объекта. - person Thibault; 23.01.2020

Попробуйте передать переменную вместо того, чтобы пытаться использовать ее напрямую.

class Thing{
    var name : String?
    var t = Thong()

    class Thong{
        func printMe(name: String){
            print(name) 
        }
    }
}
person trishcode    schedule 13.11.2018