API에서 contents에서 아예 HTML이 온다면 어떻게 해야 깔끔하게 뷰로 보여줄 수 있을까? Webview로 보여주면 간단하겠지만... 그건 원하지 않았다. 그 밑에 들어올 뷰들이 있고, 내가 하고싶은거는 HTML을 네이티브 텍스트처럼 렌더링 하는 일이었기 때문이다. 찾아보니 UIKit에 있는 UITextView에 attributedText에 넣으면 가능하다는걸 알았다. UIViewRepresentable을 채택해서 PostHTMLView을 만들었다. struct HTMLView: UIViewRepresentable { let html: String func updateUIView(_ uiView: UITextView, context: UIViewRepresentableContext) { Disp..
stackoverflow.com/questions/65209314/what-does-the-underscore-mean-before-a-variable-in-swiftui-in-an-init What does the underscore mean before a variable in Swiftui in an init()? What does the underscore mean before momentDate? Why is it needed? stackoverflow.com 변수이름 앞에 언더바를 붙이는 코딩스타일은 스위프트에서는 지양해오던 바 였다. (Property Wrapper내부에서 사용하던 코딩 스타일이었다.!! 일반 변수에서 사용하는걸 지양했다는 뜻이다.) 그러나, Combine에서 Binding변..
1. Euclidean Algorithm 유클리드 알고리즘은 정보보안, 암호학에서 많이 쓰인다! gcd(a, b) = gcd(b, a%b)임을 보이자. 증명 방식은 다음과 같다. 1) a와 b의 공약수인 d가, b와 a%b의 공약수임을 보인다. 2) b와 a%b의 공약수인 e가, a와 b의 공약수임을 보인다. 3) a와 b의 공약수 집합이 b와 a%b의 공약수 집합과 같다. 따라서 최대공약수도 같다. [증명] (1) d | a, d | b 인 d가 있다. 즉, a = dx, b = dy a = q*b + a%b 라고 하면, a%b = a-qb = d(x-qy) d는 a와 b와 a%b의 공약수이다. (2) e를 b와 a%b의 공약수라고 하자. e | b, e | a%b , 즉 b = ex, a%b = ey..
이런식으로 기간 양쪽으로 움직일 수 있는 슬라이더가 필요했다. 기존의 SwiftUI Slider는 한쪽밖에 핸들이 달려있지 않아서, 반대쪽도 있는 슬라이더를 찾아왔다. import SwiftUI import Combine //SliderValue to restrict double range: 0.0 to 1.0 @propertyWrapper struct SliderValue { var value: Double init(wrappedValue: Double) { self.value = wrappedValue } var wrappedValue: Double { get { value } set { value = min(max(0.0, newValue), 1.0) } } } class SliderHandle: ..
이런 캘린더가 필요했는데... 많은 고민 끝에 FSCalendar을 SwiftUI로 바꿔서 쓰기로 결정했다. struct CalendarView: UIViewRepresentable { typealias UIViewType = FSCalendar func makeUIView(context: Context) -> FSCalendar { let calendar = FSCalendar() calendar.delegate = context.coordinator calendar.dataSource = context.coordinator return calendar } func updateUIView(_ uiView: FSCalendar, context: Context) {} class Coordinator: NS..