Re: [問題] Swift觀念跟一些疑問求救...
※ 引述《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
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.230.73.61
※ 文章網址: https://www.ptt.cc/bbs/MacDev/M.1495880623.A.FA2.html
※ 編輯: bigbearlazir (36.230.73.61), 05/27/2017 18:24:34
推
05/28 00:35, , 1F
05/28 00:35, 1F
推
05/28 17:31, , 2F
05/28 17:31, 2F
→
05/28 17:31, , 3F
05/28 17:31, 3F
→
05/28 17:32, , 4F
05/28 17:32, 4F
→
05/28 17:32, , 5F
05/28 17:32, 5F
推
06/01 12:03, , 6F
06/01 12:03, 6F
→
06/01 12:04, , 7F
06/01 12:04, 7F
推
06/01 21:54, , 8F
06/01 21:54, 8F
→
06/01 22:33, , 9F
06/01 22:33, 9F
推
06/03 00:38, , 10F
06/03 00:38, 10F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):