Skip to content

Instantly share code, notes, and snippets.

View yoxisem544's full-sized avatar
πŸ₯‘

David Lin yoxisem544

πŸ₯‘
View GitHub Profile
s.resource_bundles = {
'ThisIsATestBundle' => ['SampleProject/Assets/*.xcassets']
}
import Foundation
fileprivate class ThisClass {}
public struct Resources {
public static var bundle: Bundle {
return Bundle(for: ThisClass.self)
}
}
s.resources = [
'<YOUR_PROJECT_NAME>/Assets/*.png', # for all pngs
'<YOUR_PROJECT_NAME>/Assets/*.m4a', # for all audios
# and so on...
]
for _ in 1...10 {
let loopCount = 50000
measure(label: "normal array", {
var testArrayA: [Int] = []
for _ in 1...loopCount {
testArrayA.append(1)
_ = testArrayA.last
}
}, complete: { time in normalArrayConsumeTimes.append(time) })
for _ in 1...10 {
let loopCount = 50000
measure(label: "normal array", {
var testArrayA: [Int] = []
for _ in 1...loopCount {
self.testArrayA.append(1)
}
}, complete: { time in normalArrayConsumeTimes.append(time) })
for _ in 1...10 {
let loopCount = 50000
measure(label: "normal array", {
var testArrayA: [Int] = []
for _ in 1...loopCount {
_ = testArrayA.last
}
}, complete: { time in normalArrayConsumeTimes.append(time) })
extension Array where Element == TimeInterval {
func averageTime() -> TimeInterval {
return reduce(0, +) / TimeInterval(count)
}
}
var normalArrayConsumeTimes: [TimeInterval] = []
var threadSafeArrayConsumeTimes: [TimeInterval] = []
var testArrayA: [Int] = []
var testArrayB = ThreadSafeArray<Int>()
let safeArray = SafeArray<Int>()
DispatchQueue.concurrentPerform(iterations: 10, execute: { i in
DispatchQueue.concurrentPerform(iterations: 10, execute: { j in
safeArray.append(i*j)
})
})
// For read
extension SafeArray {
var first: Element? {
var result: Element?
queue.sync { result = array.first }
return result
}
}
// For write
class SafeArray<Element> {
private let queue = DispatchQueue(label: "io.safe.array.queue", attributes: .concurrent)
private var array = Array<Element>()
}