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 / ContentView.swift
Created June 20, 2022 22:49
VStack / HStack の `spacing` についての挙動(`Spacer` と併用した場合も)
import SwiftUI
struct ContentView: View {
var body: some View {
VStack(spacing: 20) {
Group {
// 💡 `spacing`は勝手に潰れない
HStack {
red()
blue()
@YusukeHosonuma
YusukeHosonuma / ContentView.swift
Created June 2, 2022 00:16
SwiftUI: Drag and Drop
import SwiftUI
private let url = URL(string: "https://github.com/YusukeHosonuma")!
struct ContentView: View {
@State var isTargeted = false
@State var dropedURL: URL?
var body: some View {
VStack {
@YusukeHosonuma
YusukeHosonuma / ContentView.swift
Created May 29, 2022 10:51
レベルの高い SwiftUI 面接(仮)
//
// 元ツイート:
// https://twitter.com/tobi462/status/1529687893811556354?s=20&t=LUmtHH5wXylCFqTQpfgyVg
//
// ボーナス問題:
// https://twitter.com/tobi462/status/1529727505313124353?s=20&t=LUmtHH5wXylCFqTQpfgyVg
//
struct ContentView: View {
@State var text: String = "🍎"
@YusukeHosonuma
YusukeHosonuma / ContentView.swift
Created May 29, 2022 05:34
Canvas で Apple ロゴっぽいレインボーなレンダリングをするやつ + TimelineView でアニメーション
import SwiftUI
struct ContentView: View {
@State private var tick: Int = 0
@State private var opacity: Double = 0
@State private var inverse = true
var body: some View {
TimelineView(.animation) { timeline in
content(timeline.date)
@YusukeHosonuma
YusukeHosonuma / ContentView.swift
Created May 28, 2022 15:48
Canvas で Apple ロゴっぽいレインボーなレンダリングをするやつ。
// 🌱 Inspired by and special thanks!
// https://gist.github.com/Koshimizu-Takehito/737381f5e55678e691205fe11fe16e93
import SwiftUI
struct ContentView: View {
var body: some View {
HStack(spacing: 12) {
ForEach(["applelogo", "swift"], id: \.self) { name in
VStack(spacing: 12) {
@YusukeHosonuma
YusukeHosonuma / CanvasVsForeach.swift
Created May 23, 2022 06:49
Canvas と ForEach のパフォーマンス比較(雑)
// ref: https://tech.unifa-e.com/entry/2021/12/20/000000
struct ContentView: View {
@State var colNum = 5
@State var selection = 0
var body: some View {
Group {
if selection == 0 {
CanvasGrid(colNum: colNum)
@YusukeHosonuma
YusukeHosonuma / AttributedString.swift
Created May 22, 2022 07:12
SwiftUI 3.0: AttributedString で文字列リテラルをハイライト
import SwiftUI
import Algorithms
struct ContentView: View {
var body: some View {
Text(attributedString())
}
func attributedString() -> AttributedString {
var source = AttributedString(#"""
@YusukeHosonuma
YusukeHosonuma / GeometryAnchor.swift
Created May 19, 2022 11:47
GeometryReader と AnchorPreference で、matchedGeometry っぽいアニメーション処理。
//
// 以下の記事について matchedGeoemetry を使用せずに書いたみた的なやつ。
// https://hoshi0523.hatenablog.com/entry/2020/10/24/214520
//
// 🍊 GeometryReader version.
// 🍎 AnchorPreference version.
//
import SwiftUI
@YusukeHosonuma
YusukeHosonuma / ContentView.swift
Created May 10, 2022 03:22
SwiftUI: Group を使った場合の内部構造 → 普通の View と同じ階層構造になる
import SwiftUI
import SwiftPrettyPrint
struct ContentView: View {
var body: some View {
VStack {
Group {
Text("1")
Text("2")
}
@YusukeHosonuma
YusukeHosonuma / The introduction to SwiftUI.md
Last active April 21, 2024 12:11
あなたが求めていた SwiftUI 入門(未完結)

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

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

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

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

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