Skip to content

Instantly share code, notes, and snippets.

View bannzai's full-sized avatar
スターください

bannzai bannzai

スターください
View GitHub Profile
import XCTest
import SwiftUI
final class RetryPageSnapshotUITest: XCTestCase {
override class var runsForEachTargetApplicationUIConfiguration: Bool {
false
}
override func setUpWithError() throws {
continueAfterFailure = false
}
struct SnapshotUITest<T: PreviewProvider>: View {
var navigationBarIsHidden = false
var body: some View {
VStack(alignment: .leading, spacing: 16) {
Text(verbatim: "\(T.self)")
.font(.title3)
VStack(alignment: .leading) {
ForEach(T._allPreviews.indices, id: \.self) { index in
let preview = T._allPreviews[index]
@bannzai
bannzai / ObservableLifecycle.swift
Created March 9, 2025 04:41
Observableの効果範囲を検証するViewファイル
//
// ContentView.swift
// StateObservable
//
// Created by bannzai on 2025/03/09.
//
import SwiftUI
@Observable
@bannzai
bannzai / Tick.swift
Created August 15, 2024 17:36
Tick.swift
import Combine
import SwiftUI
class _Tick: ObservableObject {
@Published var now: Date = .now
let timer: Publishers.Autoconnect<Timer.TimerPublisher>
init(every: TimeInterval = 1) {
timer = Timer.publish(every: every, on: .main, in: .common)
.autoconnect()
@bannzai
bannzai / Document.swift
Created August 1, 2024 06:03
Document.swift
import Foundation
import FirebaseFirestore
import FirebaseFirestoreSwift
protocol SetIdentifiable: Identifiable {
mutating func set(id: ID)
}
typealias AnyEntity = Codable & Sendable & Hashable & Identifiable & SetIdentifiable
// onCall等でEntityを返す際にDocumentIDで以下のエラーになる。そのためonCallでのレスポンスはEntityを使用して、Firestoreからのデータ取得はDocument<Entity>を使用する
@bannzai
bannzai / add_sendable.sh
Last active September 3, 2024 14:12
struct, enumに無心でSendableをつけるsed。Viewは除外
#!/bin/bash
TARGET_DIR=$1
echo "やるお"
for file in $(find "$TARGET_DIR" -name "*.swift"); do
# struct User: * { の場合。ただし、View適応は除く
sed -i '' -E '/struct [A-Za-z0-9_]+: [^{]*View[^{]*\{/!s/(struct [A-Za-z0-9_]+: [^{]*)\{/\1, Sendable {/g' "$file"
sed -i '' -E '/enum [A-Za-z0-9_]+: [^{]*View[^{]*\{/!s/(enum [A-Za-z0-9_]+: [^{]*)\{/\1, Sendable {/g' "$file"
import SwiftUI
struct AsyncAction<Content: View>: View {
@State var isLoading = false
@State var task: @Sendable @MainActor () async -> Void
@ViewBuilder let content: (Bool, @escaping () -> Void) -> Content
var body: some View {
content(isLoading, {
if isLoading {
[
{
"word": "Asshole",
"kana": "アスホール",
"meaning": "いやな奴(Ass=お尻、Hole=穴)",
"notice": "「うざい野郎」「ろくでなし」"
},
{
"word": "あばずれ",
"kana": "あばずれ",
@bannzai
bannzai / CarouselView.swift
Last active October 21, 2024 08:34
CarouselView.swift
import SwiftUI
struct Item: Identifiable {
let id = UUID()
var text = ""
var color: Color = .clear
}
struct CarouselView: View {
var items: [Item] = [
@bannzai
bannzai / add_print_changes.sh
Last active September 20, 2024 21:41
Self._printChanges() を入れたり外したり
#!/bin/zsh
TARGET_DIR=$1
SCRIPT_DIR="$(cd `dirname $0` && pwd -P)"
REPOSITORY_ROOT_DIR="$(cd $SCRIPT_DIR && cd .. && pwd -P)"
find "$REPOSITORY_ROOT_DIR/$TARGET_DIR" -name "*.swift" -exec sed -i '' '/var body: some View {/a\
let _ = Self._printChanges()
' {} \;