Skip to content

Instantly share code, notes, and snippets.

View YusukeHosonuma's full-sized avatar
🏠
Working from home

Yusuke Hosonuma YusukeHosonuma

🏠
Working from home
View GitHub Profile
@YusukeHosonuma
YusukeHosonuma / The introduction to SwiftUI.md
Last active November 11, 2024 15:25
あなたが求めていた SwiftUI 入門(未完結)

昔に書いていた未完結の記事ですが、それでも宜しければどうぞです🙏

あなたが求めていた SwiftUI 入門(未完結)

あなたは今年こそ SwiftUI を学ぶ必要があると感じている。

それは今年の WWDC20 で発表された Widget と呼ばれる機能が SwiftUI でしか作成できないことを聞いたからかもしれないし、SwiftUI 100% でマルチプラットフォームのアプリを作成できるようになったからかもしれないし、あるいはいつまでも UIKit に依存しているのはリスクだと感じ取ったのかもしれない。

学習の上で一番難しい部分は、SwiftUI で考えるということだ。従来の命令的でステートフルなプログラミングから離れて、宣言的でステートレスに考えるように脳を強制しなくてはならない。すでに日本でも SwiftUI の書籍はいくつか発売されているが、その多くは使い方に関することが中心で、SwiftUI が**どのように動くのか(How it works)**についての解説は不足しているものが多いように感じる。

@YusukeHosonuma
YusukeHosonuma / Example.swift
Created August 15, 2020 02:07
NWPathMonitor を Combine の Publisher として扱えるようにする拡張
import SwiftUI
import Network
final class ViewModel: ObservableObject {
@Published var status: NWPath.Status = .satisfied
init() {
NWPathMonitor()
.publisher()
.map { $0.status }
import SwiftUI
struct EnumPicker<Enum>: View where Enum: CaseIterable & Hashable, Enum.AllCases: RandomAccessCollection {
typealias Element = Enum.AllCases.Element
private var enumType: Enum.Type
@Binding private var selection: Element
init(_ enumType: Enum.Type, selection: Binding<Element>) {
self.enumType = enumType
@YusukeHosonuma
YusukeHosonuma / jojo.md
Created May 8, 2022 05:35
開発で使えるJOJOの名言集

この○○が金やちやほやされるために技術ブログを書いていると思っているのかァーッ!!

技術ブログを書いていることをアフェリエイト目的とか、PV目的だとか言われた時に。

なるほど完璧な開発プロセスっスねーーーっ不可能だという点に目をつぶればよぉ〜

一見完璧に聞こえるけど、どう考えたって上手く回らない開発プロセスの説明を受けた時に。

理解不能理解不能・・・あ、理解可能

ようやく理解できた時に。

お前は1つの修正が終わったらキチっとコミットしてから次の修正に入るだろう? 誰だってそーする。俺もそーする。

@YusukeHosonuma
YusukeHosonuma / EnumSlider.swift
Created April 9, 2022 11:46
SwiftUI: Mapping enum to Slider.
protocol SliderCompatible {
static var sliderRange: ClosedRange<Double> { get }
var sliderIndex: Int { get }
init(fromSliderIndex: Int)
}
extension DynamicTypeSize: SliderCompatible {
static let sliderRange: ClosedRange<Double> = 0 ... 6
var sliderIndex: Int {
@YusukeHosonuma
YusukeHosonuma / ContentView.swift
Created August 29, 2023 04:41
SwiftUI: 某エディタの透明度アイコン的な
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
OpacityIcons(content: OpacityIcon1.init)
OpacityIcons(content: OpacityIcon2.init)
}
.padding()
}
@YusukeHosonuma
YusukeHosonuma / string_format.rs
Last active August 19, 2023 08:03
Rust: Format string. (println!)
use std::fmt;
struct Point {
x: i32,
y: i32,
}
impl fmt::Display for Point {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "({}, {})", self.x, self.y)
@YusukeHosonuma
YusukeHosonuma / ContentView.swift
Created August 1, 2023 01:44
SwiftUI: The Laughing Man(笑い男)のロゴ
import SwiftUI
import Algorithms
struct ContentView: View {
@State var angle: Double = 0
var body: some View {
TimelineView(.animation()) { time in
Waraiotoko(angle: angle)
.onChange(of: time.date) { _, _ in
@YusukeHosonuma
YusukeHosonuma / README.md
Last active June 24, 2023 14:44
[Swift] Class diagram of Swift Concurrency (async_await)
@YusukeHosonuma
YusukeHosonuma / PureList.swift
Last active June 22, 2023 02:42
[SwiftUI] PureList
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
PureList {
Text("Apple")
.border(.red)
Color.clear