top | item 10581576

Emerging Best Practices in Swift

17 points| ingve | 10 years ago |realm.io | reply

18 comments

order
[+] Camillo|10 years ago|reply
The second code example ("if you were doing this before ARC") is completely wrong. "alloc" is a class method that allocates memory for an instance, on which "init" is then called. Calling it on an instance returned by a factory method is nonsensical.

The error is made consistently all three times, so it's clear that the author is genuinely confused about Objective-C. Maybe he's better at Swift, but it doesn't look good.

[+] holyjaw|10 years ago|reply
The author is Ash Furrow, who has written numerous Obj-C books and apps. I highly doubt he's confused about Obj-C; he'll probably turn up in this thread at some point though, so it may be worth asking.
[+] interpol_p|10 years ago|reply
Yeah, it looks like he meant to use `retain` rather than `alloc` (assuming he means to use them outside of the next autorelease pool drain).
[+] thealistra|10 years ago|reply
The code samples were weird. Why injected property has to be optional, we can inject it using the constructor.
[+] martind81|10 years ago|reply
I stopped reading the article there. :)
[+] bsaul|10 years ago|reply
I'm a bit curious as to why people talk about "protocol oriented" as something new. It seems to me to be just a way of doing interface-oriented programming, like people coding in java have been doing for the last ten years, as well as golang dev, and many other languages... Am i missing a difference, or is it just not to confuse people that only develop in objective-c ?
[+] sinhpham|10 years ago|reply
Is the currying example even currying? It looks like it's just a function returning a function to me. I thought currying it's some thing like func contains(subString: String, string: String) -> Bool, and calling contains("a") would automatically return a func(x: String) -> Bool.
[+] bdash|10 years ago|reply
Currying refers to the process of taking a function that accepts multiple arguments, and turning it into a sequence of functions, each accepting a single argument. The example you provide would be more aptly described as partial application, which is the process of fixing a number of arguments to a function, producing a function of smaller arity.
[+] AshFurrow|10 years ago|reply
Yeah, sorry for the typos in the slides – I missed them while proofreading and unfortunately can't correct them now.

I think the people in this thread discussing how my stylistic choices are "wrong" may have missed my point. Too bad.

[+] mjmsmith|10 years ago|reply
Why is this explicitly testing for false:

  if defaults.boolForKey("launchBefore") == false {
rather than:

  if !defaults.boolForKey("launchBefore") {
[+] florian_buerger|10 years ago|reply
I use this style myself. It is way easier to read than `!condition`. If you are scanning the code, a single `!` at the beginning of the condition won't stand out that much.
[+] holyjaw|10 years ago|reply
Probably a style thing. I think I recall reading about this in one of his Swift or Objective-C books? Can't quite remember.

EDIT: Or maybe even just a hastily typed example code

[+] andyfleming|10 years ago|reply
Unrelated: Is there a plugin syncing speaker deck and the video? Or something custom?