기어가더라도 제대로

String을 StaticString 으로 전환하는 방법 본문

기타

String을 StaticString 으로 전환하는 방법

Damagucci-juice 2022. 7. 6. 19:02

둘의 차이점은 컴파일 시점에서 확정이 되느냐 안되느냐의 차이다

이름에서도 볼 수 있듯 Static String 이 컴파일 시점에 결정이 된다. 스트링보다 메모리 용량도 좀 적다.

 

문제는 런타임에 결정되는 스트링 값을 어떻게 os_log에 담는지에 관한 사건이였다. 

os_log(message)

이 메시지의 타입은 LogOSMessage 인데 이것의 타입이 StaticString 이다. 

예를들어 실행을 해봐야 값이 결정되는 스트링이 있다고 가정을 하면 os_log 에 메시지로 입력하면 컴파일 오류가 난다. 

let runtimeString: String = "\(now())"

os_log(runtimeString)  	// !! 컴파일 에러 !!

그럼 이것을 어떻게 해야할까? 

처음의 시도는 Static String 타입 안에 String 을 Static Static 으로 변환하는 타입 메서드가 있을 줄 알았다. 

뭐 늘상 그렇듯이 그런건 없었다. 

그래서 구글링을 해본 결과 

how to convert string to static string?

스택 오버플로우에서 찾음

뭔가 스크립트 스러운 문법이 등장했다. %d(10진수..?), %s(문자열) 도 된다. 그 모두를 아우르는게 %@ 인거같다. 

 

적은 김에 OSLog 를 콘솔에서 검색하기 좋게 키워드를 넣는 코드를 올린다. 

import os.log

extension OSLog {
    static var subsystem = Bundle.main.bundleIdentifier!
    
    static let ui = OSLog(subsystem: subsystem, category: "UI")
    static let network = OSLog(subsystem: subsystem, category: "Network")
    static let model = OSLog(subsystem: subsystem, category: "Model")
}

 

그런데 이렇게 해서 만든 os_log 가 console.app 에서 검색이 안된다. 

xcode 콘솔에서는 작동을 하는데, console.app 에서 안나오니 정말 기분이 안좋다 .

그럼 굳이 저렇게 나눈 이유가 무엇이란 말인가.. 카테고리별로 멋지게 쫙쫙 나누어 줬는데, 콘솔앱에서 보질 못하니 ㅠㅜㅠ

xcode console

 

console.app

어 그런데 작동이 되었다.  그 이유는, OSLogType 에  .info 를 넣었을 땐 콘솔앱에서 뜨질 않았는데 .default 하니까 뜬다. 아주 좋다 .

 

--- 다른 전체 코드 ---

//
//  ViewController.swift
//  AnchorPointTest
//
//  Created by YEONGJIN JANG on 2022/07/30.
//

import UIKit
import os.log

class ViewController: UIViewController {

    @IBOutlet weak var rectangle: UIView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        os_log("=====기본값 anchorPoint 0.5, 0.5 ======")
        os_log("Layer Frame : %@", self.rectangle.layer.frame.debugDescription)
        os_log("Layer Bounds : %@", self.rectangle.layer.bounds.debugDescription)
        os_log("Layer Position : %@", self.rectangle.layer.position.debugDescription)
        os_log("Layer anchorPoint : %@", self.rectangle.layer.anchorPoint.debugDescription)
        os_log("View Center: %@", self.rectangle.center.debugDescription)
        os_log("=====================================")

        self.rectangle.layer.anchorPoint = CGPoint(x: 0.0, y: 1.0)
        os_log("=====변경값 anchorPoint 0.0, 1.0 ======")
        os_log("Layer Frame : %@", self.rectangle.layer.frame.debugDescription)
        os_log("Layer Bounds : %@", self.rectangle.layer.bounds.debugDescription)
        os_log("Layer Position : %@", self.rectangle.layer.position.debugDescription)
        os_log("Layer anchorPoint : %@", self.rectangle.layer.anchorPoint.debugDescription)
        os_log("View Center: %@", self.rectangle.center.debugDescription)
        os_log("=====================================")

    }


}

'기타' 카테고리의 다른 글

20220703 TIL  (0) 2022.07.03
이모지를 xcode 에서 이름 알려주는 프로그램  (0) 2022.06.30
HTTP Accept type header 와 Content-Type header 의 차이점  (7) 2022.06.16
홈 커밍 데이  (0) 2022.06.05
220530 TIL  (0) 2022.05.30
Comments