본문 바로가기

SWiFT

SecKey compare 자체 생성한 사설 인증서 기반으로 서버간 통신시 서버 검증 public key 비교 let clientPublicKeys: [SecKey] = clientCertificates.compactMap { $0.publicKey } let serverPublicKeys: [SecKey] = SSLCeritificate.publicKeys(for: trust) for serverKey in serverPublicKeys as [AnyObject] { for clientKey in clientPublicKeys as [AnyObject] { if serverKey.isEqual(clientKey) { return true } } } return false certificate 비교 let clientSecCert.. 더보기
atomic propery in swift @propertyWrapper struct Atomic { private var value: Value private let lock = NSLock() init(wrappedValue value: Value) { self.value = value } var wrappedValue: Value { get { return load() } set { store(newValue: newValue) } } func load() -> Value { lock.lock() defer { lock.unlock() } return value } mutating func store(newValue: Value) { lock.lock() defer { lock.unlock() } value = newValue } } 사용 .. 더보기
@escaping 클로저에 @escaping 키워드를 사용 : 클로저로 넘기는 함수의 인자가 기존의 함수의 영역을 넘어서도 사용할 수 있도록 함 // 함수 외부에 클로저를 저장하는 예시 // 클로저를 저장하는 배열 var completionHandlers: [() -> Void] = [] func withEscaping(completion: @escaping () -> Void) { // 함수 밖에 있는 completionHandlers 배열에 해당 클로저를 저장 completionHandlers.append(completion) } func withoutEscaping(completion: () -> Void) { completion() } class MyClass { var x = 10 func callFunc() {.. 더보기