Re: [問題] Swift觀念跟一些疑問求救...

作者: bigbearlazir (肥宅)   2017-05-27 18:23:33
※ 引述《mick99988 (高雄人)》之銘言:
: 原本是寫C#剛跳過來寫Swift
: 遇到一些疑問比如說
: 在C#我可以宣告一個靜態類別
: public static class csGlobal
: {
: public static int i = 0;
: }
: 比如在程式內我會存取一個靜態類別內的共用變數好了
: 這樣在其他不同頁面我也能去檢查這變數狀態,csGlobal.i == 1 blabla來做後續邏輯
: 。
: 但在Swift可以這樣用嗎?還是有另外寫法呢?
你可以寫一個singleton物件來存取這個狀態,
以swift來說大概會長得像:
class MyStateController {
private init() {
//your initialization
}
static let shared = MyStateController()
}
或者你可以存在一個內建的singleton物件: AppDelegate。
(事實上被做成singleton的是UIApplication)
(另外關於這樣存是看習慣,有些人是不建議這樣存)
假設你在你的AppDelegate類別宣告一個狀態變數
eg. var isLoggedIn: Bool = false
你可以透過這樣的方式在其它地方存取它:
func login() {
// do your login
// ...
let app = UIApplication.shared
// UIApplication's singleton object
let appDelegate = app.delegate! as! AppDelegate
// force unwrapp and cast is safe, generally
appDelegate.isLoggedIn = true //user logged in
// or just call:
(UIApplication.shared.delegate! as! AppDelegate) = true
}
關於singleton在swift的宣告方式可以參考:
https://krakendev.io/blog/the-right-way-to-write-a-singleton
: 就是在"不同的Controller之間都能共用變數"或是靜態類別的寫法
: 有像C# 宣告public static class Golbal{...}寫法?
: 因最近有Firebase相關的存取問題
: EX:
: 我的主進入點是Tab bar Controller,下方有兩個分頁
: 然後我在主頁面內有FIRAuth.auth()?.addStateDidChangeListener()監聽器去判斷是否
: 登入,假如有登入了我會在主頁面user = FIRUser表示有人資料。
: 然後下面是我想問的
: 我在第二分頁的TableViewController的Cell上會寫類似一般APP都會有的"登出"按鈕,
: 但問題就在這邊,我在另一個分頁的Controller,又如何得知到主頁面上變數user的資訊
: ...?
上面的說明應該回答了這個問題
: 才能用這段
: if user != nil
: {
: try! FIRAuth.ayth()!.signout()
: user = nil
: }
: 最後偷渡問一下
: AppDelegate.swift 這頁面大多功用是在做什麼的阿?
: 我本來依名字以為是所有委託都寫在這邊 但好像不是?
事實上AppDelegate繼承自UIApplicationDelegate,
顧名思義就是你的整個應用程式的delegate。
也就是當某些應用程式級別的事情發生的時候,讓你有些機會做些處置。
更多細節建議參考蘋果的官方文件:
https://developer.apple.com/reference/uikit/uiapplicationdelegate
作者: tentenlee (天天)   2017-05-28 00:35:00
這是用object-c的概念去做的吧 swift 用struct就好了
作者: Blueshiva (龍野南雲)   2017-05-28 17:31:00
這跟用Class還是Struct無關,單純是要不要設定為static如果單純的get/set value,那直接設定為某個class或struct的static var,如果有其他需求,那就作成singleton再去存取
作者: mick99988 (高雄人)   2017-06-01 12:03:00
嗯...我再做做看singleton 目前有看沒有懂XDD
作者: denkeni (Denken)   2017-06-01 21:54:00
一樓應該只是想表達 Swift 一向推薦優先用 value type
作者: yuanruo (罪を憎んで人を憎まず)   2017-06-01 22:33:00
Singleton用struct寫? 那就不是全局唯一實例了
作者: Blueshiva (龍野南雲)   2017-06-03 00:38:00
用Static Struct Function搭配variable,其實可以做到

Links booklink

Contact Us: admin [ a t ] ucptt.com