サンプル作成中
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増えた所からスタートする。
つまり、ホームボタンで閉じると数秒はまだ動いているけれど、その後停止するということみたい。