Skip to content

Instantly share code, notes, and snippets.

View devxoul's full-sized avatar
👨‍💻
Always coding

Suyeol Jeon devxoul

👨‍💻
Always coding
View GitHub Profile
@devxoul
devxoul / README.md
Last active November 21, 2016 08:54
List slow compile functions in Swift

Slow.py

Usage

$ xcodebuild clean build -workspace 'MyApp.xcworkspace' -scheme 'MyApp' OTHERFLAGS="-Xfrontend -debug-time-function-bodies" | tee xcode_raw.log
$ python slow.py xcode_raw.log
23559.6ms   ./Sources/A.swift:219:16    @objc dynamic func doneButtonDidTap()
23439.6ms ./Sources/B.swift:763:8 @objc final func checkCondition()
extension ObservableType {
typealias Accumulator<A> = (A, E) -> Observable<A>
func flatScan<A>(_ seed: A, accumulator: @escaping Accumulator<A>) -> Observable<A> {
return self
.scan(Observable<A>.just(seed)) { observable, current -> Observable<A> in
observable.flatMap { previous in
accumulator(previous, current)
}
}
@devxoul
devxoul / swiftkorea.swift
Last active April 8, 2017 02:29
Swift Korea 질문에 대한 답변
/*
뭔가 퍼즐같은 RxSwift 질문입니다.
서버에 3 페이지의 분량을 한꺼번에 요청하려는데,
요청은 동시에 보내고 응답은 순서대로 처리하고 싶습니다.
테스트 시나리오:
각 요청(Observable)들은 subscribe 될 때 request가 시작
각 요청의 request에는 2, 4, 2초씩 걸린다고 가정
-> 2초 후 첫 페이지가 뜨고
-> 추가로 2초 후 나머지가 전부 뜨는
상황을 원하고 있습니다.
@devxoul
devxoul / fastcampus-ios-examples.swift
Created May 23, 2017 16:58
패스트캠퍼스 iOS 프로젝트 캠프 - 교재에 없는 Swift 예시
//
// 배열과 클로저 활용
//
[1, 3, 6, 2, 7, 9]
.filter { $0 % 2 == 0 } // 짝수 필터링
.map { $0 * 2 } // 모든 값에 곱하기 2
.reduce(0, +) // 초깃값부터 각각의 값에 더하기 연산
extension ObservableType where E: Any {
func map<T: ImmutableMappable>(_ mappableType: T.Type) -> Observable<T> {
return self
.map { try Mapper<T>().map(JSONObject: $0) }
.do(onError: { error in
if error is MapError {
log.error(error)
}
})
}
@devxoul
devxoul / test_get_collection.py
Last active August 9, 2017 06:20
Flask API 를 테스트하기 위한 아이디어
# 실제 API
def get_collections(serializer):
collections = orm.foo()
paging = orm.bar()
return serializer.serialize(items=collections, paging=paging)
# 테스트
def test_serializer_get_collections():
collections = fixture_collections()
paging = fixture_paging()
@devxoul
devxoul / ReactorKit+Plugin.swift
Created December 22, 2017 10:10
Self triggering mutation concept
extension Reactor {
public func plugin<PluginReactor>(
keyPath: KeyPath<State, PluginReactor?>,
mutation mutationFactory: @escaping (PluginReactor) -> Mutation
) -> Observable<Mutation> where PluginReactor: Reactor {
return self.stateDidCreate.flatMapLatest { [weak self] () -> Observable<Mutation> in
guard let `self` = self else { return .empty() }
return self.state.flatMapLatest { state -> Observable<Mutation> in
guard let pluginReactor = state[keyPath: keyPath] else { return .empty() }
let pluginStates = Observable.merge(pluginReactor.state.skip(1))
@devxoul
devxoul / sns-enable-endpoint.py
Last active January 11, 2018 14:11
Enable Amazon SNS endpoint.
from boto.sns import connect_to_region
AWS_ACCESS_KEY = ''
AWS_SECRET_KEY = ''
AWS_REGION = ''
ARN = ''
sns = connect_to_region(AWS_REGION,
aws_access_key_id=AWS_ACCESS_KEY,
import CoreBluetooth
let serviceUUID = CBUUID(string: "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
let service = CBMutableService(type: serviceUUID, primary: true)
/// 1. `CBCentralManager`를 초기화하고,
self.central = CBCentralManager(delegate: self, queue: nil)
/// 2. 사용가능한 상태가 되면 특정 UUID를 가진 서비스를 스캔합니다.
func centralManagerDidUpdateState(central: CBCentralManager) {
public enum Card: Int {
case Zero = 0
case Half = 127
case One = 1
case Two = 2
case Three = 3
case Five = 5
case Eight = 8
case Thirteen = 13
case Twenty = 20