일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- IOS
- core data
- 데드락
- deadlock
- Algorithm
- 동시성
- SwiftUI
- decode
- 100 days of SwiftUI
- 인프런
- @state
- 비동기
- struct
- 동기화
- Codable
- UserDefaults
- Apple Developer Academy
- async
- 상호배제
- 프로세스 스케줄링
- Swift
- 오브젝트
- 운영체제
- 가상 메모리
- forEach
- scrollview
- Linked List
- 앨런
- 알고리즘
- COLOR
- Today
- Total
기어가더라도 제대로
String을 StaticString 으로 전환하는 방법 본문
둘의 차이점은 컴파일 시점에서 확정이 되느냐 안되느냐의 차이다
이름에서도 볼 수 있듯 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 에서 안나오니 정말 기분이 안좋다 .
그럼 굳이 저렇게 나눈 이유가 무엇이란 말인가.. 카테고리별로 멋지게 쫙쫙 나누어 줬는데, 콘솔앱에서 보질 못하니 ㅠㅜㅠ
어 그런데 작동이 되었다. 그 이유는, 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 |