Skip to content

Instantly share code, notes, and snippets.

Avatar

Pofat pofat

View GitHub Profile
@pofat
pofat / crash.swift
Created Jul 24, 2022
Code that crash Swift compiler (before 5.8)
View crash.swift
protocol P {
associatedtype A
associatedtype B
}
protocol Q: P {}
extension Q where A == Int {
typealias B = Int
}
View View.swift
struct Collapsable<Content: View>: View {
@State var collapsed: Bool = true
let content: () -> Content
init(@ViewBuilder content: @escapin () -> Content) {
self.content = content
}
var body: some View {
VStack {
@pofat
pofat / filter_keyPath.swift
Created May 22, 2022
Filter with KeyPath
View filter_keyPath.swift
struct Foo {
var bar: Int
var overThreshold: Bool {
bar > 5
}
}
let fooArray: [Foo] = ...
let filtered = fooArray.filter(\.overThreshold)
View demangler.swift
import Foundation
guard CommandLine.arguments.count > 1 else {
print("Please specify object file/executable")
exit(EXIT_FAILURE)
}
var nm = Process()
nm.launchPath = "/usr/bin/nm"
nm.arguments = [CommandLine.arguments[1]]
@pofat
pofat / operator.swift
Created Jan 12, 2022
[Effect<Output, Failure>] -> Effect<[Output], Failure>
View operator.swift
extension Effect {
// Zip with other effects
func zip<Others: Collection>(with others: Others)
-> Effect<[Output], Failure>
where Others.Element == Effect<Output, Failure> {
let first = map { [$0] }
.eraseToEffect()
return others
.reduce(first) { zipped, next in
@pofat
pofat / DelegatePublisher.swift
Last active Aug 9, 2022
How to handle delegate in a reactive way? Turn a delegate into Publisher.
View DelegatePublisher.swift
import Combine
import CombineExt // Check this implementation: https://github.com/CombineCommunity/CombineExt/blob/main/Sources/Operators/Create.swift
import CoreBluetooth
// Client to generate target delegate publisher
// Learned from https://github.com/pointfreeco/composable-core-location/blob/main/Sources/ComposableCoreLocation/Live.swift
struct PeripheralClient {
enum Action: Equatable {
case didUptateName
@pofat
pofat / Kind.swift
Created Mar 12, 2021
Swift Struct Metadata
View Kind.swift
// Kind of type
public enum Kind {
case `struct`
case `enum`
case optional
case opaque
case tuple
case function
case existential
case metatype
View get_pre_main_time.swift
/// Call this at main()
/// return: time in milliseconds
func getPreMainTime() -> Double {
let currentTimeIntervalInMilliSecond = Date().timeIntervalSince1970 * 1000.0
var procInfo = kinfo_proc()
let pid = ProcessInfo.processInfo.processIdentifier
var cmd: [Int32] = [CTL_KERN, KERN_PROC, KERN_PROC_PID, pid]
var size = MemoryLayout.stride(ofValue: procInfo)
// Retrieve information of current process
if sysctl(&cmd, UInt32(cmd.count), &procInfo, &size, nil, 0) == 0 {
@pofat
pofat / Podfile
Created Feb 16, 2020
Turn your pods into statically linked
View Podfile
# Add these in your Podfile (available for CocoaPods v1.7.x+)
# Replace with any Pods that you want to keep dynamically linked
keep_dynamically_linked = ['RxCocoa', 'RxSwift']
target 'YourApp' do
# all you pods here...
end
@pofat
pofat / scan_unused_selectors.swift
Created Feb 16, 2020
Scan unused ObjC selectors
View scan_unused_selectors.swift
/*
* Note: You need to build this script before use
* Usage:
* 1. Build by `swfitc scan_unused_selectors.swift`
* 2. Run by `./scan_unused_selectors /path/to/yourMachO`
*
* How to locate MachO of your APP (`/path/to/yourMachO` in above example)? In your Xcod project navigator, you can find a folder `Products`
* In that folder you can see your app (after any build) and right click on it -> "Show In Finder"
* You can get your APP's location by drag it into your terminal. Say it's "/path/to/MyApp.app", your MachO path would be "/path/to/MyApp.app/MyApp"
*/