Недавно я загрузил Xcode 10, и я заметил явную ошибку при использовании weak
или unowned
переменных. Мне удалось создать простой пример, демонстрирующий проблему, чтобы люди могли ее воссоздать.
class MainClass {
weak var weakClass: SomeClass!
init() {
// WARNING: Instance will be immediately deallocated because property 'weakClass' is 'weak'
self.weakClass = SomeClass()
}
}
class SomeClass {}
Как говорится в ошибке, weakClass
немедленно освобождается после того, как MainClass
инициализирован и всегда равен нулю.
Я открыл ту же площадку с Xcode 9.3, и я могу подтвердить, что код работает нормально, без ошибок или предупреждений
Это ошибка в Xcode 10, или я ничего не получаю. Если это так, есть ли какие-нибудь обходные пути?
EDIT: оригинальный пример
class LoginCoordinator {
var viewModel: LoginViewModel?
var viewController: LoginViewController?
init() {
viewModel = LoginViewModel()
viewModel?.coordinator = self
viewController = LoginViewController(viewModel: viewModel!)
}
}
class LoginViewModel: ViewModelDelegate {
weak var coordinator: LoginCoordinator?
}
coordinator
всегда ноль в LoginViewModel
AppDelegate.swift
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func setupView() {
let coordinator = LoginCoordinator()
let navigationController = UINavigationController(rootViewController: coordinator.create)
navigationController.isNavigationBarHidden = true
navigationController.navigationBar.isTranslucent = false
window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = navigationController
window?.makeKeyAndVisible()
window?.layer.cornerRadius = 6
window?.layer.masksToBounds = true
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
setupView()
return true
}