作者bigbearlazir (肥宅)
看板MacDev
标题Re: [问题] Swift观念跟一些疑问求救...
时间Sat May 27 18:23:33 2017
※ 引述《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://webptt.com/cn.aspx?n=bbs/MacDev/M.1495880623.A.FA2.html
※ 编辑: bigbearlazir (36.230.73.61), 05/27/2017 18:24:34
1F:推 tentenlee: 这是用object-c的概念去做的吧 swift 用struct就好了 05/28 00:35
2F:推 Blueshiva: 这跟用Class还是Struct无关,单纯是要不要设定为static 05/28 17:31
3F:→ Blueshiva: 如果单纯的get/set value,那直接设定为某个class或 05/28 17:31
4F:→ Blueshiva: struct的static var,如果有其他需求,那就作成 05/28 17:32
5F:→ Blueshiva: singleton再去存取 05/28 17:32
6F:推 mick99988: 嗯...我再做做看 06/01 12:03
7F:→ mick99988: singleton 目前有看没有懂XDD 06/01 12:04
8F:推 denkeni: 一楼应该只是想表达 Swift 一向推荐优先用 value type 06/01 21:54
9F:→ yuanruo: Singleton用struct写? 那就不是全局唯一实例了 06/01 22:33
10F:推 Blueshiva: 用Static Struct Function搭配variable,其实可以做到 06/03 00:38