$ 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()
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
뭔가 퍼즐같은 RxSwift 질문입니다. | |
서버에 3 페이지의 분량을 한꺼번에 요청하려는데, | |
요청은 동시에 보내고 응답은 순서대로 처리하고 싶습니다. | |
테스트 시나리오: | |
각 요청(Observable)들은 subscribe 될 때 request가 시작 | |
각 요청의 request에는 2, 4, 2초씩 걸린다고 가정 | |
-> 2초 후 첫 페이지가 뜨고 | |
-> 추가로 2초 후 나머지가 전부 뜨는 | |
상황을 원하고 있습니다. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 배열과 클로저 활용 | |
// | |
[1, 3, 6, 2, 7, 9] | |
.filter { $0 % 2 == 0 } // 짝수 필터링 | |
.map { $0 * 2 } // 모든 값에 곱하기 2 | |
.reduce(0, +) // 초깃값부터 각각의 값에 더하기 연산 | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
} | |
}) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 실제 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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |