Skip to content

Instantly share code, notes, and snippets.

View yimajo's full-sized avatar
:octocat:

Yoshinori Imajo yimajo

:octocat:
  • Curiosity Software inc.
  • Tokyo, Japan
  • 07:34 (UTC +09:00)
View GitHub Profile
@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 / 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 / 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 / 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 / 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 / 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 / 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 / Makefile
Last active June 1, 2023 03:11
Swift Packageでapple/swift-formatを入れた場合のMakefileの例
XCRUN = /usr/bin/env xcrun --sdk macosx
SWIFT_FORMAT_PATHS = <フォーマットしたいパス>
format:
$(XCRUN) swift run -c release \
swift-format --mode format --recursive --in-place $(SWIFT_FORMAT_PATHS)
format-skip-build :
$(XCRUN) swift run -c release --skip-build \
swift-format --mode format --recursive --in-place $(SWIFT_FORMAT_PATHS)
import Foundation
import MobileCoreServices
import CoreImage
public struct JPEGConverter {
let data: Data
let dataUTI: String
public init(data: Data, with dataUTI: String) {
self.data = data
import UIKit
import PhotosUI
class ViewController: UIViewController {
@IBAction func presentPickerForImagesIncludingLivePhotos(_ sender: Any) {
presentPicker(filter: PHPickerFilter.images)
}
private func presentPicker(filter: PHPickerFilter) {