Swift 5 ve Xcode 11
Dolayısıyla xCode 11'de pencere çözümü artık appDelegate içinde geçerli değildir. Bunu SceneDelgate'e taşıdılar. Bunu SceneDelgate.swift dosyasında bulabilirsiniz.
Şimdi bir var window: UIWindow?hediyesi olduğunu fark edeceksiniz .
Benim durumumda bir storyboard'dan bir TabBarController kullanıyordum ve onu rootViewController olarak ayarlamak istedim.
Bu benim kodum:
sceneDelegate.swift
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
self.window = self.window ?? UIWindow()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let tabBarController = storyboard.instantiateViewController(withIdentifier: "tabBarController") as! UITabBarController
for child in tabBarController.viewControllers ?? [] {
if let top = child as? StateControllerProtocol {
print("State Controller Passed To:")
print(child.title!)
top.setState(state: stateController)
}
}
self.window!.rootViewController = tabBarController
self.window!.makeKeyAndVisible()
print("Finished scene setting code")
guard let _ = (scene as? UIWindowScene) else { return }
}
Bunu burada yaptığım gibi doğru sahne yöntemine eklediğinizden emin olun. Film şeridinde kullandığınız tabBarController veya viewController için tanımlayıcı adını ayarlamanız gerekeceğini unutmayın .

Benim durumumda, bunu sekme görünümleri arasında paylaşılan değişkenleri takip etmek için bir stateController ayarlamak için yapıyordum. Aynı şeyi yapmak isterseniz aşağıdaki kodu ekleyin ...
StateController.swift
import Foundation
struct tdfvars{
var rbe:Double = 1.4
var t1half:Double = 1.5
var alphaBetaLate:Double = 3.0
var alphaBetaAcute:Double = 10.0
var totalDose:Double = 6000.00
var dosePerFraction:Double = 200.0
var numOfFractions:Double = 30
var totalTime:Double = 168
var ldrDose:Double = 8500.0
}
protocol StateControllerProtocol {
func setState(state: StateController)
}
class StateController {
var tdfvariables:tdfvars = tdfvars()
}
Not: Sadece kendi değişkenlerinizi veya bunun yerine izlemeye çalıştığınız her şeyi kullanın, ben sadece benimkini tdfvariables yapısında bir örnek olarak listeledim.
TabController'ın her görünümünde aşağıdaki üye değişkeni ekleyin.
class SettingsViewController: UIViewController {
var stateController: StateController?
.... }
Sonra aynı dosyalara aşağıdakileri ekleyin:
extension SettingsViewController: StateControllerProtocol {
func setState(state: StateController) {
self.stateController = state
}
}
Bunun yaptığı şey , görünümler arasında değişken geçişine yönelik tekli yaklaşımdan kaçınmanıza olanak tanır . Bu, uzun vadede singleton yaklaşımından çok daha iyi olan bağımlılık enjeksiyon modeline kolayca izin verir.