iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 8
0
Software Development

iOS 從 Objective-c 進化為 Swift 的 30天之旅系列 第 8

[Day 8] Swift 使用單例 singleton 做一個 全域變數

前言

singleton 中文單例?史丹利?
當然可以使用userdefault
可是集中管理就不方便
應該沒辦法看所有的變數
除非用程式叫出來看?太麻煩了
之前是使用singleton
官方說法只會執行一次
且且且記憶體比較省!?

Swift 與 OC 差別!?

OC

這部分是 GlobalVariables class宣告的instance

@implementation GlobalVariables
+ (GlobalVariables *) instance
{
    static GlobalVariables *_default = nil;
    if (_default == nil)
    {
        _default = [[GlobalVariables alloc] init];
    }
    return _default;
}
@end

其他宣告完GlobalVariables空間後
就可以改變全域變數honeBgHeight 這個變數

GlobalVariables * globalVariables = [GlobalVariables instance];
globalVariables.honeBgHeight = (int)_homeUIView.ChangeBgImg.frame.size.height;

看起來蠻簡單的感覺
有使用callback來使用?
但swift有callback嗎?

Swift

這部分是 GlobalVariables class宣告

class GlobalVariables: NSObject {
    static let sharedKraken = GlobalVariables()
    private override init() {
    
    }
    var isShip : Bool = false
}

其他class就可以直接宣告起來用

GlobalVariables.sharedKraken.isShip = true

這是目前研究出來的
但我想法應該不是這樣啊
我想說應該可以使用OC的形狀
下去寫

OC寫法轉Swift 失敗

老實說我轉換寫法查詢結果應該是以下程式
基本上也是可以運行

//private var testInt : Int = 0 //上面測試變數
class var sharedInstance: GlobalVariables {
    struct Static {
        static let instance: GlobalVariables = GlobalVariables()
    }
    return Static.instance
}

但是但是但是 我在呼叫的時候
沒辦法呼叫到testInt

沒辦法使用 GlobalVariables.sharedInstance.testInt 來呼叫
不知道為什麼 待之後有時間再來研究
如果知道的話也歡迎留言告訴我 拜託

今日進度

Controller 跳轉 上一頁 返回

Swift

self.dismiss(animated: true, completion:nil)

OC

[self dismissViewControllerAnimated:YES completion:nil];

發現好像很多ViewController 字都被省略這樣簡寫
大概了解了一下

其餘昨天除法沒辦法除
原因跟我說的一樣
我使用Int下去存
是沒辦法做除法
所以改成Float就沒這個問題了

只剩下小數點

UI部分加入了支出 收入的target
所以現在可以客製化UI變化
如下圖


上一篇
[Day 7] Swift 簡易計算機 (一)
下一篇
[Day 9] Swift Extension 與 Class 使用範例
系列文
iOS 從 Objective-c 進化為 Swift 的 30天之旅17

尚未有邦友留言

立即登入留言