Skip to content

Instantly share code, notes, and snippets.

@takasek
takasek / CodePiece.swift
Created September 30, 2016 12:31
DictionaryのValueがOptionalならunwrapするコード #CodePiece
import Foundation
protocol OptionalType {
associatedtype Wrapped
var optional: Wrapped? { get }
}
extension Optional : OptionalType {
var optional: Wrapped? { return self }
}
@takasek
takasek / CodePiece.swift
Created September 25, 2016 16:27
Swift3ではすべての型はAnyObjectにブリッジできるようになったが、果たして `===` した結果はどうなるのか?と調べてみた #CodePiece
struct Struct {
func method() {}
}
enum Enum { case a }
class Class {
func method() {}
}
func compareSelf<T: Any>(_ target: T) {
print(target, type(of: target), (target as AnyObject) === (target as AnyObject))
@takasek
takasek / CodePiece.swift
Created September 25, 2016 15:43
同一のclassでboxingされるのは、as AnyObjectしたときだけ。as Anyではダメ(❗) #CodePiece
import Foundation
let aName = Notification.Name(rawValue: "a")
struct Struct { let id: Int }
let structAsAny1 = Struct(id: 1) as AnyObject
let structAsAny2 = Struct(id: 2) as AnyObject
let structAsAny3 = Struct(id: 3) as AnyObject
@takasek
takasek / CodePiece.swift
Created September 25, 2016 15:40
@es_kumagai @rizumita なんだか掴めてきた気がします #CodePiece
let structAsAny1 = Struct(id: 1) as Any
let notification = Notification(name: aName, object: structAsAny1, userInfo: nil)
(notification as AnyObject) === (notification as AnyObject) //false
(structAsAny1 as AnyObject) === (structAsAny1 as AnyObject) //false
let structAsAnyObject = Struct(id: 1) as AnyObject
(structAsAnyObject) === (structAsAnyObject) //true
@takasek
takasek / CodePiece.swift
Created September 25, 2016 13:08
as Anyしたstructの同一性判定がうまくいってない話。コード置いておきますね。実行するたびに結果が変わる不思議なコードです。 #CodePiece
import Foundation
let aName = Notification.Name(rawValue: "a")
struct Struct { let id: Int }
extension Struct: Equatable {
public static func ==(lhs: Struct, rhs: Struct) -> Bool {
return lhs.id == rhs.id
}
}
@takasek
takasek / CodePiece.swift
Created September 25, 2016 11:59
もしかして、Equatableに適合させてやればstructもNotification.objectにできるか…?と思ったら、なんか…Equatableは見てないっぽい。 #CodePiece
import Foundation
let aName = Notification.Name(rawValue: "a")
struct Struct: Equatable {
let id: Int
static func ==(lhs: Struct, rhs: Struct) -> Bool {
print("\(lhs.id) vs \(rhs.id) = \(lhs.id == rhs.id)")
// 👆ログに出ない。ってことは、この == 、呼ばれてない!
return lhs.id == rhs.id
@takasek
takasek / CodePiece.swift
Created September 25, 2016 11:37
NSNotification.objectもAny?を受けられるようになっているので、これもstructやenumが効くのか!?マジで!?と思って実験してみた結果。だめじゃん! #CodePiece
let aName = Notification.Name(rawValue: "a")
class Class {}
struct Struct {}
enum Enum {
case a, b
}
let aClass = Class()
let aStruct = Struct()
@takasek
takasek / CodePiece.swift
Created September 25, 2016 11:16
Swift3のNotification.userInfo、 `[AnyHashable: Any]?` ってことは、StructやEnumを受け取れるんだ…! #CodePiece
let aName = Notification.Name(rawValue: "a")
class Class {}
struct Struct {}
enum Enum {
case a, b
}
let aClass = Class()
let aStruct = Struct()
@takasek
takasek / CodePiece.txt
Created September 22, 2016 14:48
で、どうやってrc版を優先使用するかだけど… http://devcenter.bitrise.io/docs/cocoapods-how-to の「早くて汚いやり方」でいいかな #CodePiece
[Notifwift]@23:41 % gem uninstall --all --executables cocoapods
ERROR: While executing gem ... (Gem::InstallError)
cocoapods is not installed in GEM_HOME, try:
gem uninstall -i /Users/tksk_mba/.rvm/gems/ruby-2.2.1@global cocoapods
[Notifwift]@23:42 % gem uninstall -i /Users/tksk_mba/.rvm/gems/ruby-2.2.1@global cocoapods
Select gem to uninstall:
1. cocoapods-1.0.1
2. cocoapods-1.1.0.rc.2
3. All versions
@takasek
takasek / CodePiece.swift
Created September 19, 2016 06:29
NSObject継承したclassで、function型プロパティの中にあるself( Self->()->Self )って何だろう、ということで調べた結果 #CodePiece
func check(_ target: Any, as name: String, at method: String) {
print(" \(method)\(name) =")
print("   👔 \(type(of: target))")
print("   🍖 \(target)")
}
final class SubClassOfNSObject: NSObject {
override init() {
print("🌱init start")
super.init()