Skip to content

Instantly share code, notes, and snippets.

View kitasuke's full-sized avatar

Yusuke Kita kitasuke

View GitHub Profile

Protocol Buffersで高速な通信を型安全に実現する

最近AppleがProtocol Buffersの公式プラグインをGitHubに公開して話題になったので、実際に使ってみました。APIの通信が速くなったり、型安全に通信処理を書ける など、メリットが多いと感じたので簡単に紹介します。

他の事例だと、iOSオールスターズ2で発表された「これから始めるProtocol Buffers導入」が非常に参考になると思うので併せて読んでみてください。

この記事ではProtocol Buffersの概要について書いています。別途こちらの記事で使い方について サンプルを使って説明している ので、併せて読んでみてください。

Protocol Buffersとは

@kitasuke
kitasuke / UITest.md
Last active March 18, 2021 06:35
iOSにおけるUIテスト
import Foundation
import RxSwift
import FBSDKCoreKit
import FBSDKLoginKit
enum FacebookSDKError: Error {
case tokenNotFound
}
extension Reactive where Base: FBSDKLoginManager {
@kitasuke
kitasuke / SwiftPM-Function-Builders.swift
Last active September 10, 2019 02:11
Experimental code for SwiftPM with Function Builders. Declarative package description for SwiftPM.
import Foundation
@_functionBuilder
struct ContentListBuilder {
static func buildBlock() -> ContentList {
return EmptyContentList()
}
static func buildBlock(_ list: ContentList) -> ContentList {
@kitasuke
kitasuke / StringLiteralExpr-jp.md
Created August 3, 2019 12:33
StringLiteralExpr-jp

Swift 5.1へのStringLiteralExprの改善

こんにちは。iOSエンジニアの@kitasukeです。

今回は、Swift Compilerのパーサー内部でlibSyntaxが作成する、StringLiteralExprに関する改善を行ったので、その内容を簡単に紹介します。
ちなみに、この変更はlibSyntax内での変更でありSwiftのString APIへの変更ではありません。

概要

libSyntaxには、Stringリテラル用にStringLiteralExprStringInterpolationExprの2種類のシンタックスが定義されています。

@kitasuke
kitasuke / StringExtension.swift
Created August 24, 2015 03:19
String extension in Swift for Xcode beta5
extension String {
var lastPathComponent: String {
get {
return (self as NSString).lastPathComponent
}
}
var pathExtension: String {
@kitasuke
kitasuke / defer.sil
Last active March 1, 2018 14:18
Swift -> SIL
sil_stage canonical
import Builtin
import Swift
import SwiftShims
// main
sil @main : $@convention(c) (Int32, UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>) -> Int32 {
bb0(%0 : $Int32, %1 : $UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>):
%2 = integer_literal $Builtin.Int32, 0 // user: %3
@kitasuke
kitasuke / defer.sil
Created March 1, 2018 14:03
Swift -> SIL
sil_stage canonical
import Builtin
import Swift
import SwiftShims
// main
sil @main : $@convention(c) (Int32, UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>) -> Int32 {
bb0(%0 : $Int32, %1 : $UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>):
%2 = integer_literal $Builtin.Int32, 0 // user: %3
import UIKit
extension UITableView {
func registerNib<T: UITableViewCell>(forCellType type: T.Type) {
let name = String(describing: type)
let nib = UINib(nibName: name, bundle: nil)
register(nib, forCellReuseIdentifier: name)
}
func registerNib<T: UIView>(forHeaderFooterType type: T.Type) {
import UIKit
import RxSwift
import RxCocoa
extension Reactive where Base: UITableView {
func items<S: Sequence, Cell: UITableViewCell, O: ObservableType>
(cellType: Cell.Type)
-> (_ source: O)
-> (_ configureCell: @escaping (Int, S.Iterator.Element, Cell) -> Void)
-> Disposable