Skip to content

Instantly share code, notes, and snippets.

View hmhmsh's full-sized avatar

shunkun hmhmsh

View GitHub Profile
@hmhmsh
hmhmsh / AdvancedExpressibleByStringLiteral.swift
Last active March 25, 2021 09:53
ExpressibleByStringLiteralの使い所
// 今回は、StringLiteralTypeは、String型でしか使用しないため独自Protocolを定義
protocol CustomExpressibleByStringLiteral: ExpressibleByStringLiteral where StringLiteralType == String {
init(stringLiteral value: Self.StringLiteralType)
}
// UserのIdを表す型
struct UserId {
let value: String
}
@hmhmsh
hmhmsh / filter.swift
Last active March 13, 2018 08:44
forループの中でcontinueやbreakを使用しているのを、filterに書き換える
let array = [0, 2, 0, 2, 2, 1, 2, 2]
// flatMap({$0})を入れないと、コンパイルエラー
// AnySequenceとArrayで同じprefix()メソッドがあり、どちらを使用するのかが曖昧のため、コンパイルエラーになる
let map = array.prefix(while: {$0 != 1}).flatMap({$0}).filter( {$0 == 2} )
print(map) // [2, 2, 2]
// filterの中で何かして、結果に反映するかの判断するには、このようにすることができる
// つまり、continueを使用していたところは、return falseにすることができる
let map = array.prefix(while: {$0 != 1}).flatMap({$0}).filter( {
@hmhmsh
hmhmsh / original.swift
Last active February 27, 2018 03:55
2つのOptional型の値を場合分けして処理する書き方(場合分け時の処理は自分の環境での例です)
func logA(tag: String, param: [String: String]) {
print("\(tag) : \(param)")
}
func logB(tag: String) {
print("\(tag) : param なし")
}
func main0(param: [String: String]?, id: String?) {
if var param = param {
@hmhmsh
hmhmsh / Codable_CodingKeys.swift
Last active February 27, 2018 03:57
Codable in Swift4
// When property name and key are different
let data = """
{
"user_id":0,
"user_name": "name",
"mail-address": "address"
}
""".data(using: .utf8)!
@hmhmsh
hmhmsh / UIButton_titleColor_Builder.swift
Last active January 18, 2018 08:40
Extension titleColor of UIButton
protocol ColorMaker {
associatedtype WillSetColorMaker
func color(_ color: UIColor) -> WillSetColorMaker
}
protocol ControlStateMaker {
associatedtype WillSetControlStateMaker
func controlState(_ controlState: UIControlState) -> WillSetControlStateMaker
}
@hmhmsh
hmhmsh / Testable_swiftTests.swift
Last active October 4, 2018 02:51
いまさらながらSwiftでTDDをやってみた ref: https://qiita.com/hmhmsh/items/842e795d4b2a41556b5b
class TodoList {
var list = Array<String>()
func isEmpty() -> Bool {
return list.count == 0
}
func append(_ todo: String) {
list.append(todo)
}
@hmhmsh
hmhmsh / Entity.swift
Last active January 20, 2018 13:31
MVVMを2パターン考えてみる(追記:MVPでしたすみません) ref: https://qiita.com/hmhmsh/items/263f1f531c220eb781ee
struct Entity {
let name: String
let age: Int
}
#import <UIKit/UIKit.h>
@interface SnsPostViewController : UIViewController
+ (void)showActionSheet:(UIViewController*)vc ActivityItems:(NSArray*)activityItems;
@end
- (id)getUserDefaultsWithKey:(NSString*)key {
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
id value = [ud boolForKey:key];
return value;
}
/ 条件にマッチする要素のみを取り出したい場合
func filter(array: []) {
let newArray = array.filter { $0 < 3 }
// newArray -> [1,2]
}
// 各要素に対して処理を行い、かつ戻り値が必要ない場合
func forEach(array: []) {
array.forEach {
print("\($0)")