본문 바로가기

100DaysOfSwiftUI - Day 24 마지막 과제가 아래와 같다. 커스텀 ViewModifier (와 View extension) 을 만드는데, 글씨체를 크고 푸른색으로 만들어 프로미넌트타이틀에 적당하게 바꾸는 모디파이어. Create a custom ViewModifier (and accompanying View extension) that makes a view have a large, blue font suitable for prominent titles in a view. 작성한 코드는 아래와 같다. import SwiftUI struct ProminentTitle : ViewModifier { func body(content: Content) -> some View { content .font(.largeTitle.bold()) ...
100DaysOfSwiftUI - Day 23 스위프트UI의 뷰는 class 가 아닌 struct 이다. 단순하다. 클래스 구조는 기본 클래스에도 자주 사용되지 않는 수많은 프로퍼티들이 달려있고, 이 기본 클래스를 상속받는 모든 뷰들도 이들을 다 가지고 있다. 스위프트UI의 뷰에 모디파이어가 붙으면, 이전에 만들어진 뷰에 대해 수정된 뷰가 된다. struct ContentView: View { var body: some View { Button("Hello") { print(type(of: self.body)) } .padding() .frame(width: 300, height: 100) .background(.yellow) } } 단순한 버튼에, padding, frame, background 3개의 모디파이어가 붙어 모양이 변경된 뷰. 클릭 이..
파이썬 베쎌함수 그래프 그리기 from scipy.special import jv import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 30, 0.02) # https://docs.scipy.org/doc/scipy/reference/generated/scipy.special.jv.html#scipy.special.jv ys = [ jv(i, x) for i in range(3) ] for y in ys: plt.plot(x, y) plt.grid() plt.show() 베셀함수 (Bessel Function) 은 파이썬의 scipy.special 모듈의 여러 특수함수들 중에 하나인 jv 함수로 제공된다. 위 코드를 실행하여 만들어진 그래프는 다음과 같다.
100DaysOfSwiftUI - Day 19 간단한 컨버터 어플리케이션을 만들라는 숙제. 제곱미터를 평으로, 평을 제곱미터로 변환하는 macOS 어플리케이션을 작성하 보았다. 막상 만들어보려니 간단한 TextField, Text, Picker 의 사용법도 헷갈렸다. 아주 무식한 코드는 다음과 같다. import SwiftUI struct ContentView: View { @State private var fromValue : Double = 0 @State private var fromUnit = "제곱미터" @State private var toUnit = "평" @State private var toValue : Double = 0 var toValue_ : Double { if fromUnit == toUnit { return fromVal..
100DaysOfSwiftUI 16 17 18 19 20 Proj1 - I 22-07-01 Proj1 - II 22-07-02 Proj1 - III 22-07-02 Challenge - unit cnv 22-07-03 Proj2 - I - zstack - gradient - button - alert 22-07-05 21 22 23 24 25 Proj2 - II - Guess the Flag 22-07-05 Proj2 - III - wrapup - review 22-07-07 Proj3 - I - Views - Modifier 22-07-09 Proj3 - II - wrapup - review 22-07-09 Proj1~3 - 가위바위보 22-07-18 26 27 28 29 30 Proj4 - I - Stepper - Date - C..
100DaysOfSwiftUI - Day 16 WeSplit 첫번째 프로젝트 var body: some View { } 는 swift 문법적으로는 computed property 인 것 같다. @State 를 추가하여, immutable 프로퍼티를 변경이 가능하도록 만들어준다. struct 가 아닌 다른 어느 곳에 저장한다고 하는데... 어딜까. @State 를 추가하지 않고, 버튼핸들러에서 프로퍼티를 변경하려 하면, View 가 immutable 이기 때문에 에러메시지가 발생하는 걸 보여주는 설명이 참 좋았다. 안그랬으면 그냥 그런갑다 하고 넘어갔을 것. https://daewonyoon.tistory.com/440
Geopy AttributeError: 'NoneType' object has no attribute 'latitude' 주소에서 위도와 경도를 가져오기 위해 geopy를 이용하는 코드에서 no attribute 'latitude' 에러가 발생할 수 있다. 코드를 보자. from geopy.geocoders import Nominatim def geocoding(address): geolocoder = Nominatim(user_agent="South Korea", timeout=None) geo = geolocoder.geocode(address) x_y = [geo.latitude, geo.longitude] return x_y for addr in ["강원 강릉시 해안로 1459", "강원 강릉시 초당순두부길 77번길 15"]: print(addr, geocoding(addr)) geocoding 함수는 사람들이 사용..
[Swift] error: ambiguous use of 'split(separator:maxSplits:omittingEmptySubsequences:)' 너무 간단한 코드를 짜는데, 너무 이상한 에러가 발생했다. 코드가 풀려고 하는 문제는 문자열을 단어별로 분리해서, 가장 짧은 단어의 길이를 찾는 것이다. 빈칸이 포함된 어느정도 길이의 문자열이 인자로 주어지고, 빈칸으로 단어가 나누어진다. 푸는 알고리즘은 간단하다 주어진 문자열을 빈칸으로 나누어 ( spllit 메소드 ) 단어의 시퀀스로 만든다 시퀀스의 각 단어의 길이를 .count 로 구한다. 이를 매핑해서 단어길이의 시퀀스로 변환한다. 단어길이의 시퀀스에서 가장 작은 것을 .min() 으로 구한다. 코드를 보면 한줄로 끝이 난다. (아래 코드는 가독성을 위해 줄바꿈을 추가.) func find_short(_ str: String) -> Int { return str.split(separator: " ..