Skip to content

Instantly share code, notes, and snippets.

View treastrain's full-sized avatar
🏠
Learning at home

treastrain / Tanaka Ryoga treastrain

🏠
Learning at home
View GitHub Profile
//
// ContentView.swift
// Playground
//
// Created by treastrain on 2025/08/07.
//
public import Observation
import SwiftUI
@treastrain
treastrain / ContentView.swift
Created August 6, 2025 18:28
https://github.com/Kuniwak/BLEMacroApp/blob/master/DESIGN.md の Swift 6.2 対応版(`ViewBinding` に `@dynamicMemberLookup` 付き)
import Combine
import SwiftUI
public protocol StateProtocol: Sendable {}
public protocol StateMachineProtocol<State>: Actor {
associatedtype State: StateProtocol
nonisolated var state: State { get }
nonisolated var stateDidChange: AnyPublisher<State, Never> { get }
}
import SwiftUI
struct ContentView: View {
@StateObject private var object = Object()
var body: some View {
List(object.numbers, id: \.self) { number in
Text("Content \(number)")
}
.refreshable {
@treastrain
treastrain / Scipio-CwlCatchException_Package.swift
Created October 16, 2023 13:00
giginet/Scipio の `scipio prepare` を試して、そのままでは失敗になってしまったものたち https://x.com/treastrain/status/1713862218222358645
// swift-tools-version: 5.9
import PackageDescription
let package = Package(
name: "Scipio-CwlCatchException",
platforms: [.iOS(.v15)],
dependencies: [
.package(url: "https://github.com/Quick/Nimble", exact: "12.3.0"),
.package(url: "https://github.com/ashfurrow/Nimble-Snapshots", exact: "9.6.0"),
@treastrain
treastrain / MCBrowserView.swift
Created September 7, 2023 19:00
`MCBrowserView` for using Multipeer Connectivity `MCBrowserViewController` with SwiftUI (iOS 13.0+, macOS 10.15+, Mac Catalyst 13.1+, tvOS 13.0+, visionOS 1.0+)
//
// MCBrowserView.swift
// You can copy and modify this file and use it with free!
//
// Created by treastrain / Tanaka Ryoga on 2023/09/08.
//
import MultipeerConnectivity
import SwiftUI
@treastrain
treastrain / ObservableObjectPlaygrounds.swift
Created July 3, 2023 04:06
Swift・SwiftUI・Combine・ObservableObject チャレンジ このコード例の場合、「object1 will change」・「object2 will change」・「object3 will change」はそれぞれそれぞれ何回 print されるか?
import Combine
import Foundation
// MARK: - パターン1
final class Object1: ObservableObject {
@Published var value1 = 0
@Published var value2 = 0
@Published var value3 = 0
}
@treastrain
treastrain / NotCalledDeinitIfPrefersGrabberVisibleIsTrue.swift
Last active June 15, 2023 09:57
`UISheetPresentationController.prefersGrabberVisible` が `true` だったり、`View.presentationDragIndicator(_:)` が `.visible` だと deinit されない https://twitter.com/treastrain/status/1669271711269945344
//
// ViewController.swift
// SheetPresentationControllerPlayground
//
// Created by Ryoga Tanaka on 2023/06/15.
//
import UIKit
@available(iOS 16.4, *)

Keybase proof

I hereby claim:

  • I am treastrain on github.
  • I am treastrain (https://keybase.io/treastrain) on keybase.
  • I have a public key ASBdL6Vgvw1nlMCihCWm5S1HnhdFPENkrBUewmLlwPbsrQo

To claim this, I am signing this object:

@treastrain
treastrain / FormatStyle.md
Created March 26, 2023 17:37
Swift Foundation's `FormatStyle`

in Swift, use formatted methods directly on the types you want to format, optionally using FormatStyle and its subtypes to customize formatter output. This approach supports dates, integers, floating-point numbers, measurements, sequences, and person name components. Foundation caches identically-configured formatter instances internally, allowing you to focus on your app’s formatting needs.

Data Formatting | Apple Developer Documentation https://developer.apple.com/documentation/foundation/data_formatting

Numbers and Currency

//
// CoreNFCProblemApp.swift
// CoreNFCProblem
//
// Created by treastrain on 2022/10/10.
//
import CoreNFC
import SwiftUI