본문 바로가기

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: " ..
[Swift] Counter 구현하기 via codewars codewars 를 풀다가 한줄짜리 카운터 구현이 있어서 옮겨본다. 한눈에 이해가 안 되서 옮겨보는 것임. 카운터라고 하면, 일련의 시퀀스 (리스트, 어레이로 주어진) 가 주어지고, 각각의 갯수를 세는 것을 말한다. python 에는 collections 에 Counter 라는 클래스를 간단히 이용하면 된다. 코드는 다음과 같다. func counter(_ seq: [Int]) -> [Int:Int] { return Dictionary( seq.map { ($0, 1) }, uniquingKeysWith: +) } // ViacheslavTronewsky@codewars 딕셔너리는 두개짜리 튜플의 시퀀스를 받아서, 딕셔너리로 바꿔주는데, 중복되는 키가 있을 때 어떻게 처리할지를 결정하는 인자가 uniqu..