57.
使用中のOSS : BrightFutures
https://github.com/Thomvis/BrightFutures
• Before
User.logIn(username, password) { user, error in
if !error {
Posts.fetchPosts(user, success: { posts in
// do something with the user's posts
}, failure: handleError)
} else {
// handeError is a custom function to handle errors
handleError(error)
}
}
58.
使用中のOSS : BrightFutures
https://github.com/Thomvis/BrightFutures
• After
User.logIn(username,password).flatMap { user in
Posts.fetchPosts(user)
}.onSuccess { posts in
// do something with the user's posts
}.onFailure { error in
// either logging in or fetching posts failed
}
59.
Moduleの穴
• クラス名だけを文字列で取
得する
• NSManagedObject in Test
• Storyboard & InterfaceBuiler
63.
クラス名だけを文字列で取得する
extension NSObject {
/// クラス名をモジュール名を取り除いて取得します。
public class var nameForClass: String {
return NSStringFromClass(self)
.componentsSeparatedByString(".").last!
}
}
64.
NSManagedObject in Test
• NSManagedObjectサブクラスを用いたクラスのテスト
で実行時に落ちる
65.
NSManagedObject in Test
• NSManagedObjectサブクラスを用いたクラスのテスト
で実行時に落ちる
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'executeFetchRequest:error: A fetch request must have an entity.'
*** First throw call stack:
(
0 CoreFoundation 0x000000010387ef35 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x0000000103517bb7 objc_exception_throw + 45
2 CoreData 0x00000001025e137d -[NSManagedObjectContext
executeFetchRequest:error:] + 4541
66.
NSManagedObject in Test
• NSManagedObjectサブクラスを用いたクラスのテスト
で実行時に落ちる
• Objective-Cから見た時のNSObjectサブクラス名もSwift
のクラスに対してはModule名.クラス名
• @objc()キーワードを使ってObjective-Cから見た時の
NSObjectサブクラス名を変更する
67.
NSManagedObject in Test
• Before
class Product: NSManagedObject {
@NSManaged var name: String
}
68.
NSManagedObject in Test
• Before
• After
class Product: NSManagedObject {
@NSManaged var name: String
}
@objc(Product)
class Product: NSManagedObject {
@NSManaged var name: String
}
69.
NSManagedObject in Test
• Before
• After
class Product: NSManagedObject {
@NSManaged var name: String
}
@objc(Product)
class Product: NSManagedObject {
@NSManaged var name: String
}
@objc()キーワードを使ってObjective-Cから見た
時のNSObjectサブクラス名を変更
Be the first to comment