1
Я получаю сообщение об ошибке «Невозможно преобразовать значение типа« String »в тип аргумента« Test »при попытке вернуть значение из функции в ленивом сохраненном свойстве. Я не могу обнаружить никаких проблем в закрытии lazy var.Ошибка компилятора при использовании функции в ленивом сохраненном объекте
import UIKit
public struct Value {}
public class Test {
var id: String = ""
public func getValueById(id: String) -> Value {
return Value()
}
public lazy var value: Value = {
// Compiler error: Cannot convert value of 'String' to expected argument type 'Test'
return getValueById(self.id)
}()
}
Это correct.Here в цитату из главы АРК, в разделе Устранение Сильные Эталонные Циклы для затворов (Свифт языка программирования) - _Swift требует, чтобы вы писали self.someProperty или self.someMethod() (а не только someProperty или someMethod()) всякий раз, когда вы ссылаетесь на члена «я» в закрытии. Это поможет вам вспомнить, что можно случайно захватить себя. – robertvojta