일반적으로 사용자 액션 없이 데이터 수정을 해도 뷰에 바로 반영이 안 되기 때문에 다음과 같이 해야 한다.

 

class DataModel : ObservableObject {
    @Published public var state: Int
    
    init(_ data: Int) {
		self.state = data
    }
}

struct ContentView: View {
    @ObservedObject var data: DataModel
    
    var body: some View {
    	HStack {
        	Text("\(self.data.state)")
        }
    }
}

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    	let dataModel = DataModel(0)
        let contentView = ContentView(data: dataModel)
        
        DispatchQueue.global().async {
            while true {
                DispatchQueue.main.async { // 업데이트는 꼭 메인 스레드에서 해야 합니다.
                    contentView.data.objectWillChange.send() // 먼저 실행
                }
                _ = PseudoUpdater.refresh(dataModel) // pseudo: 업데이트 코드 실행 
                usleep(500_000)
            }
        }

        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = UIHostingController(rootView: contentView)
            self.window = window
            window.makeKeyAndVisible()
        }
        
        // ...
    }

이렇게 하면 다음과 같은 결과를 얻는다

 

  1. 씬을 초기화 할 때 DataModel의 state 프로퍼티를 0으로 초기화해 생성한다.
  2. 컨텐트 뷰를 미리 생성한 DataModel과 함께 생성한다.
  3. DispatchQueue를 이용해 글로벌 스레드에서 비동기 작업으로 다음과 같은 작업을 무한 반복한다.
    1. 메인 스레드에서 contentView의 data에 데이터가 바뀐다는 신호를 보낸다.
    2. 의사코드: dataModel에 대한 업데이트 작업을 진행한다.
    3. 0.5초 대기한다.
  4. 기본 씬 생성 코드...

이렇게 하면 외부 코드(여기서는 PseudoUpdater의 refresh 메서드)에 따라서 dataModel 내의 데이터가 변경될 것이고 이에 우리는 변경될 것이라는 것을 SwiftUI에 알려줬으니 수치가 변경 되면 알아서 반영해줄 것이다.

 

 

 

p.s. 별 거 아닌데 내 조잡한 영어 실력으로 구글링 하면 죄다 BindableObject 같은 말도 안 되는 Deprecated 된 예시만 들어서 몇 시간 꼴았다. 갈 곳 잃은 분노를 식히고 하루 지나서야 포스트 작성.

xcode 6 이상은 osx 버전 때문에 쓸 수 없다. 그렇다면 어떡해야 할까?

그냥 Apple Developer의 다운로드 홈페이지로 가자 -> https://developer.apple.com/downloads/index.action


검색 창에 xcode 5를 쳐보면 잘 나온다.



참고로 mp4만 인코딩 되어있어, mp4를 지원하지 않는 브라우저는 볼 수 없다.

Algebra의 의미는 대수학


유감이지만 아직 한글 자막은 입히지 않았다. 곧 작업해볼 예정.

본문 내용을 그대로 싣는 건 염치없는 짓이라고 생각해서 간단하게 적는다.


터미널에서 정수를 입력 받아 그 수를 각각 영단어로 배열(one, two, three… zero ) 하라~인데. 책 내용에도 써져있지만 머리를 엄청 쓰게 만들었다.


처음 볼 때는 각 숫자에 대한 값에 단어를 넣어주고 scanf로 정수 값을 입력 받아서 if 문으로 말해주면 되나? 라고 생각했지만, 조금만 더 생각해봐도 알 수 있듯, %d에 2자리 수 이상을 입력해버리면 말짱 꽝이였다.


하여튼 지금 생각나는 건 전부 효율성 없는 쌩 노가다 작업 뿐이다. 선생님께 질문했으니 곧 답을 알려주시지 않을까?