Skip to content

Instantly share code, notes, and snippets.

View yimajo's full-sized avatar
:octocat:

Yoshinori Imajo yimajo

:octocat:
View GitHub Profile
@yimajo
yimajo / gist:1bab4079190619acc6ee7da3b3c84c26
Last active January 7, 2021 10:21
RxSwiftでHotなストリームにsubscribe(on:)してみる
import RxSwift
import Foundation
let queue = DispatchQueue.global(qos: .background)
// 念の為に書くと、ここはメインスレッドで呼び出している
let stream = Observable.just(1)
.flatMap { value -> Observable<Int> in
print("flatMap: isMain \(Thread.isMainThread)")
@yimajo
yimajo / HarfModal.swift
Created January 30, 2021 07:36
SwiftUIでハーフモーダル的なものを出す
import SwiftUI
struct ContentView: View {
var body: some View {
ZStack(alignment: .top) {
MapView()
SlideOverCard {
VStack {
Text("Half Modal")
.font(.headline)
@yimajo
yimajo / SwiftUINavigationAndUIKit.swift
Created June 17, 2021 10:22
SwiftUIのNavigationView下にある階層にUIKitが挟まるとNavigationLinkが動作しないんじゃが?
import UIKit
import SwiftUI
import PlaygroundSupport
struct ContentView: View {
var body: some View {
NavigationView {
VStack {
// UIKitのViewを使う。こいつの階層内でNavigationLinkしてみる
MyUIKitContentsView()
@yimajo
yimajo / FunctionCombine.playground
Last active November 13, 2021 09:16
Publishers.MergeMany sample
import Combine
struct ReducerContainer {
let reducer: () -> (AnyPublisher<Int, Never>)
init(reducer: @escaping () -> (AnyPublisher<Int, Never>)) {
self.reducer = reducer
}
static func combine(_ reducers: [ReducerContainer]) -> ReducerContainer {
@yimajo
yimajo / var.swift
Last active October 29, 2021 10:15
たまにvarを使いたいときクロージャ内にvarを置けば安心かも(ループ編)
let largeArray = ...
...
let (array1, array2) = { array -> ([Object], [Object])
var array1: [Object] = []
var array2: [Object] = []
array.forEach {
if $0.type == .nanika {
array1.append($0)
} else {
array2.append($0)
@yimajo
yimajo / NotGlobalActor.swift
Last active November 13, 2021 12:04
DAOでアクター使ってくとき、actor型をそのまま使うのかそれとも(at)globalActorを使うのかのメモ
import _Concurrency
/*
DAOでアクター使って行きたいとき(モチベーション的には非同期処理であることを矯正したい場合)、
設計としては
actor型をDAOの型とするパターンと、globalActorをDAOで利用する場合の2パターンある。
SampleAがactorを使うパターンで、SampleBがglobalActorを使うパターン。
*/
enum SampleA {
@yimajo
yimajo / continuation_sample.swift
Last active November 19, 2021 16:11
withCheckedThrowingContinuationとwithCheckedContinuationの違い
private func addItem2() async throws {
// CheckedContinuation<Void, Error>)と型書かないといけないんだなあこれが
try await withCheckedThrowingContinuation { (continuation: CheckedContinuation<Void, Error>) in
writeContext.perform {
let newItem = Item(context: writeContext)
newItem.timestamp = Date()
do {
try writeContext.save()
continuation.resume()
@yimajo
yimajo / effective_swift_toc.md
Created November 21, 2021 12:33
Effective Swift本の目次と目的を考える

目的

Effective Swift本があるとしたなら、どんな目的で誰のための本?

  • 何のため
    • 言語の正しい理解と、簡潔で明瞭で正確なソフトウェアの設計に役立つ内容にしたい
  • どうやる
    • Effective〜な流儀に従って書籍スタイルは逆引きまとめスタイル
    • 言語仕様が常に進化しているSwiftの動向をしっかり押さえながら、それらの最新の機能をどのように使うべきかについて実践的な観点から逆引きにしてその技法をまとめる
  • 本当はどうあれば効果的?
@yimajo
yimajo / loan.swift
Last active November 29, 2021 13:56
クリーンアーキテクチャ本のLoanというEntityをSwiftで表現してみる
class Loan {
// 借入元金
private var principle: Double
// 貸出金利 もしくは 貸出利率 の 百分率。0%や100%
private var rate: Double
// 貸し出し期間
var period: TimeInterval
// 借金総額
private var balance: Double {
didSet {
@yimajo
yimajo / swiftlee.di.swift
Last active March 12, 2025 09:55
SwiftLeeのDIのコード例
// https://www.avanderlee.com/swift/dependency-injection/
// MARK: - Example
struct DataController {
@Injected(\.networkProvider) var networkProvider: NetworkProviding
func performDataRequest() {
networkProvider.requestData()
}