Pull to refresh

Comments 10

Могут ли ленивые вычисляемые свойства вычисляться больше одного раза?

могут:

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/properties/

If a property marked with the lazy modifier is accessed by multiple threads simultaneously and the property hasn’t yet been initialized, there’s no guarantee that the property will be initialized only once.

Ценное замечание. Благодарю
+ цитата из WWDC2016: "lazy properties of your classes aren't atomic either."

Что, на мой личный взгляд, показывает насколько бессмысленно задавать подобные каверзные синтаксические вопросы на собеседованиях.

В целом с вами согласен
На собеседованиях частенько задаются бесполезные вопросы, которые никогда не пригодятся в работе :) Такова реальность

Главное не плодить глупости и не повторять этот опыт самим когда собеседцем кого то

Во втором примере есть еще один способ объявить реализацию по умолчанию - когда в самом протоколе (не только extension) есть func nameMethod() . Разница будет видна в таком коде:

let test: NameProtocol = NameClass()
test.nameMethod()

К такому подходу стоит относиться осторожно, велик шанс столкнуться с подобной ситуацией:

Что приведет к ошибке в рантайме(

При реализации собственного инициализатора memberwise инициализатор пропадает. Нет простого способа вернуть его

Это можно сделать, если вынести init в extension

/struct NameStruct {
    let first: String
    let second: String

    
}

extension NameStruct {
    init(first: String) {
        self.first = first
        self.second = "two"
    }
}

let nameStruct = NameStruct(first: "1", second: "2") // no error

Хороший способ, но, по-моему, это лишь локальное решение для конкретного случая. По такому же принципу можно руками написать инициализатор со всеми свойствами.

Sign up to leave a comment.

Articles