サンプル作成中

Xーcodeで File>new>Project  プロジェクトの作成だよ

ios、SingleView App >next

Product name プログラムの名前(今回はGAMEとした)

ファイルの場所を指定して(デスクトップに作ったけど)

ContentView.swift を含むプロジェクトが作成される。

Classをつくる

File>new>File で SwiftUI.View

SaveAs のところにClass名(GAME)を指定してCreate

Classの定義なので、View表示のところは消してしまう。

 

GAME.swift

//

//  GAME.swift

//  base

//

//  Created by **** on 2020/09/22.

//  Copyright © 2020 ****. All rights reserved.

//

 

import SwiftUI

 

class Game: ObservableObject{

    @Published var count:Int = 0

    var timer = Timer()

    

    init(){

        count = 1

        timerStart()

    }

    

    func timerStart(){

        self.timer = Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true){ timer in

            self.timercall()

        }

    }

    

    func timercall(){

        count += 1

    }

 

}

 

struct GAME_Previews: PreviewProvider {

    static var previews: some View {

        /*@START_MENU_TOKEN@*/Text("Hello, World!")/*@END_MENU_TOKEN@*/

    }

}

 

Swiftuiで作ったら、Previewsを消しても勝手にまた出来ちゃった。

swiftで作れば良かったのかも。

ContentView

//

//  ContentView.swift

//  base

//

//  Created by **** on 2020/09/22.

//  Copyright © 2020 ****. All rights reserved.

//

 

import SwiftUI

 

struct ContentView: View {

    @EnvironmentObject var game: Game

    var body: some View {

        Text("count \(game.count)")

    }

}

 

struct ContentView_Previews: PreviewProvider {

    static var previews: some View {

        ContentView()

        .environmentObject(Game())  //これがないと表示の時にエラーとなる

    }

}

それから、SceneDelegate.swiftの

        let contentView = ContentView()

の後に1行足して

        let contentView = ContentView()

            .environmentObject(Game())

とする。

このプログラムは、タイマ割り込みでcountをインクリメントして、表示するだけのもの。

シミュレータで実行するとカウントアップしていく様子がわかる。

シミュレータでホームボタンを押してしばらくしてからもう一度開くと、

カウント値が3〜5増えた所からスタートする。

つまり、ホームボタンで閉じると数秒はまだ動いているけれど、その後停止するということみたい。