THIS IS A BLOG POST DRAFT THAT I WILL NEVER PUBLISH
INSTEAD I PLAN TO DO A SERIES OF SMALLER BLOG POSTS ON THE SUBJECT
I write new code in Swift. It’s fun and I like it.
//: Playground - noun: a place where people can play | |
import Cocoa | |
// I’m trying to figure out how to add a Notification observer in Swift code where the notification name is defined in a .m file. | |
// | |
// This playground won’t actually run, because it assumes an NSString named SomeNotification defined in a .m file. So it can’t actually be used to see the errors. It’s just for illustration. | |
// The errors are listed in the comments. | |
class MyClass { |
//: Playground - noun: a place where people can play | |
import Cocoa | |
var str = "Hello, playground" | |
protocol Message: class { | |
var uniqueID: String {get} | |
} |
//: Playground - noun: a place where people can play | |
import Cocoa | |
// When you’re downloading objects from the web, it’s common to need to merge changes | |
// from the server to already-existing local objects. (If your data model allows for | |
// mutable objects, as with Core Data, that is.) | |
// | |
// The below is a Swift translation of how I’ve done this in Objective-C. | |
// Note that it works just fine in Swift — though it does require NSObject subclasses. |
/* The rules outlined in Comparing Reactive and Traditional represent the business logic | |
for contacting the server: coalesce requests over a timeout period, | |
coalesce non-unique consecutive requests, and ignore requests shorter | |
than a specified length. If I’ve learnt anything in nearly 30 years | |
of writing software, it’s you don’t want to put business logic in the UI. | |
Working with UI is complicated enough without embedding your business logic there. | |
That’s why the business logic is embedded in the Fetcher object | |
– mostly in the -fetchQuery:error: method. | |
Because we’re coalescing calls, having a method with a completion handler |
// This is the traditional version of the RxSwift-based gist posted here: | |
// https://gist.github.com/cliss/51cb740b14f3cd56ba1d11f2a9a6ba02 | |
// This won’t compile and it surely has errors. | |
// (The same may be true as the original.) | |
// Some things are obviously omitted. | |
// It's meant as illustrative rather than as actual running code. | |
// | |
// The problem being solved: | |
// There is a text field. When you type in it, all changes are coalesced | |
// for 0.3 seconds, and then an HTTP call is made, and a table is updated |
//: Playground - noun: a place where people can play | |
import Cocoa | |
class Person: Hashable { | |
let firstName: String | |
let lastName: String | |
let email: String |
//: Playground - noun: a place where people can play | |
import Cocoa | |
var aSet = Set<Int>() | |
aSet.insert(1) | |
aSet.insert(2) | |
aSet.insert(3) | |
// The rest of this code doesn't even remotely work. |
//: Playground - noun: a place where people can play | |
import Cocoa | |
var str = "Hello, playground" | |
@objc protocol Thing { | |
func doThing(x: String) throws -> String | |
} |
//: Playground - noun: a place where people can play | |
import Cocoa | |
protocol Account: Equatable { | |
var accountID: String {get} | |
} | |
// https://twitter.com/optshiftk/status/628985834801336320 |