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