সুইফ্ট 5 এবং এক্সকোড 11
সুতরাং এক্সকোড 11 এ উইন্ডো সমাধানটি অ্যাপ্লিকেশনটির আর বৈধ নয় valid তারা এটিকে সিনডেলগেটে নিয়ে গেছে। আপনি এটি সিনডেলগেট.সুইফ্ট ফাইলটিতে খুঁজে পেতে পারেন।
আপনি এখন এটি var window: UIWindow?উপস্থিত আছে লক্ষ্য করবেন ।
আমার পরিস্থিতিতে আমি স্টোরিবোর্ড থেকে একটি ট্যাববারকন্ট্রোলার ব্যবহার করছিলাম এবং এটিকে রুট ভিউকন্ট্রোলার হিসাবে সেট করতে চেয়েছিলাম।
এটি আমার কোড:
sceneDelegate.swift
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
self.window = self.window ?? UIWindow()//@JA- If this scene's self.window is nil then set a new UIWindow object to it.
//@Grab the storyboard and ensure that the tab bar controller is reinstantiated with the details below.
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 //Set the rootViewController to our modified version with the StateController instances
self.window!.makeKeyAndVisible()
print("Finished scene setting code")
guard let _ = (scene as? UIWindowScene) else { return }
}
আমি যেমন এখানে করেছি ঠিক তেমন দৃশ্যের পদ্ধতিতে এটি যুক্ত করার বিষয়টি নিশ্চিত করুন। নোট করুন যে স্টোরিবোর্ডে আপনি যে ট্যাব বারকন্ট্রোলার বা ভিউকন্ট্রোলার ব্যবহার করছেন তার জন্য আপনাকে সনাক্তকারী নাম সেট করতে হবে ।

আমার ক্ষেত্রে আমি ট্যাব দর্শনগুলির মধ্যে ভাগ করে নেওয়া ভেরিয়েবলগুলির উপর নজর রাখতে একটি স্টেট কন্ট্রোলার সেট করার জন্য এটি করছিলাম। আপনি যদি এই একই জিনিসটি করতে চান তবে নীচের কোডটি যুক্ত করুন ...
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
}
//@JA - Protocol that view controllers should have that defines that it should have a function to setState
protocol StateControllerProtocol {
func setState(state: StateController)
}
class StateController {
var tdfvariables:tdfvars = tdfvars()
}
দ্রষ্টব্য: কেবল নিজের ভেরিয়েবলগুলি ব্যবহার করুন বা পরিবর্তে যা কিছু আপনি ট্র্যাক রাখার চেষ্টা করছেন তা ব্যবহার করুন, আমি কেবলমাত্র খনিটিকে tdfvariables কাঠামোর একটি উদাহরণ হিসাবে তালিকাভুক্ত করেছি।
ট্যাবকন্ট্রোলারের প্রতিটি দৃশ্যে নিম্নলিখিত সদস্যের পরিবর্তনশীল যুক্ত করুন।
class SettingsViewController: UIViewController {
var stateController: StateController?
.... }
তারপরে সেই একই ফাইলগুলিতে নিম্নলিখিতগুলি যুক্ত করুন:
extension SettingsViewController: StateControllerProtocol {
func setState(state: StateController) {
self.stateController = state
}
}
এটি যা করে তা আপনাকে ভিউগুলের মধ্যে ভেরিয়েবলগুলি পাস করার একক পদ্ধতিতে এড়াতে দেয় । এটি নির্ভরতা ইনজেকশন মডেলের জন্য সহজেই মঞ্জুরি দেয় যা দীর্ঘতর রান হয় তবে সিঙ্গলটন পদ্ধতির better