Archiv der Kategorie: Mac

Swift 2.0: Pitfalls mixing protocol extensions and inheritance

This post refers to Swift 2.0, beta 6:

Protocol extensions are great to provide default behavior for a protocol. But beware. They expose some dangerous traits when used in combination with inheritance.

//: Playground

import UIKit

protocol Winable:class {
    func win() -> String
}

extension Winable {
    func win() -> String {
        return ("You won")
    }
}

class BattleDelegate:Winable  {
    func win() -> String {
        return ("You won this battle")
    }
}

class EpicBattleDelegate:BattleDelegate {
    override func win() -> String {
        return ("You won this epic battle.")
    }
}

class LotteryDelegate:Winable {
}

class LotteryBigPrizeDelegate:LotteryDelegate {
    func win() -> String {
        return ("You won the big prize")
    }
}

class Game {
    weak var delegate:Winable?

    init (delegate:Winable) {
        self.delegate = delegate
        print (self.delegate?.win())
    }
}

let commonBattleGame = Game(delegate:BattleDelegate())
//prints "Optional("You won this battle.")"
let extraordinaryBattleGame = Game(delegate:EpicBattleDelegate())
//prints "Optional("You won this epic battle.")"

let commonLotteryGame = Game(delegate: LotteryDelegate())
//prints "Optional("You won")"
let extraordinaryLotteryGame = Game(delegate: LotteryBigPrizeDelegate())
//prints "Optional("You won")

My assumption was that LotteryBigPrizeDelegate would print:

"Optional("You won the big prize")

Well. I was wrong. I didn’t win the big prize.

Conclusion: If you want to subclass your next fancy class that conforms to a protocol with an extension be careful: You have to implement all protocol functions the subclass wants to change in the root class, too. If you don’t your subclass won’t be able to override the protocol’s standard behavior defined in the extension.

Note: Everything would work fine if I would instantiate LotteryBigPrizeDelegate with the type „LotteryBigPrizeDelegate“ instead of „Winable“. But that would defy the notion of using a delegate protocol at all, wouldn’t it?

Update: @jckarter states „Protocol extensions can’t extend a class method table. The subclass method shadows the extension method.“

Veröffentlicht unter Mac | Hinterlasse einen Kommentar | 280 views

Rules! hits the iOS App Store

Rules_ansicht_E5_a

After six month of hard work Rules! is ready for launch.

On it’s first day it has been number 1 of all paid apps in Germany and we were featured all around the world.

It’s an exciting time.

Website: http://www.rulesgame.net

Update:
Reviews are pouring in.

Reviews:

Rules! is that sort of lightning in a bottle that only comes along every so often. I’d rank it right up there with Threes!, and not just because both games so gleefully abuse exclamation points. – Gamezebo

Veröffentlicht unter Indie Games, Mac, Rules!, Text | 1 Kommentar | 45 views

Neues Sicherheitsfeature in iOS 7

neuesSicherheitsfeature

Veröffentlicht unter Bild, Mac, Piraten, Politik, Satire | Verschlagwortet mit | Hinterlasse einen Kommentar | 94 views

Ehrliche Mac-Dialoge 2

Veröffentlicht unter Bild, Mac, Satire | Verschlagwortet mit | 3 Kommentare | 40 views

SZ OS 1.1 Update

Endlich ist das Smartbook-Hardware-Update mit aufregenden Fehlerverbesserungen auch auf Amazon verfügbar.

SZ OS 1.1 bringt folgende Verbesserungen:

* Bugfixes
* Verbesserungen in der UI
* Aktualisiertes Kartenmaterial
* QWERTZ-Tastatur
* Stabilitäts- und Geschwindigkeitsverbesserungen (falls Sie in der Zwischenzeit selbst stabiler und schneller geworden sind.)

Auch Kunden der 1.0-Version müssen sich nicht grämen. Für Sie steht exklusiv folgendes Patch zum Laden, Ausdrucken und Aufkleben zur Verfügung:

Veröffentlicht unter Bild, Mac, Text | 1 Kommentar | 75 views

Wenn Apple Straßenschilder gestalten würde

Und was sonst so (nicht) passiert ist.

Veröffentlicht unter Bild, Mac, Satire | Hinterlasse einen Kommentar | 52 views

Rückblick: Was 2012 alles nicht geschah

Januar 2012

Millionen von Deutschen nehmen sich am wärmsten Neujahrstag seit 1877 vor, joggen zu gehen, mit dem Rauchen aufzuhören und weniger zu trinken, lassen ihren guten Vorsätzen aber keine Taten folgen.

Die Welt ist auf Gangnam-Style noch nicht vorbereitet.

Angela Merkel beendet die Eurokrise nicht durch beherztes Eingreifen.

Februar 2012

Der nordkoreanische Diktator Kim Jong-il (geboren als Juri Irsenowitsch Kim) blickt nicht mehr auf Seide, Schuhsohlen oder Dosensuppen.
Weiterlesen

Veröffentlicht unter Mac, Piraten, Politik, Satire, Text, Video | Verschlagwortet mit | 1 Kommentar | 28 views

Smartbook – Analog ist das neue Digital

Ein Smartphone.
Ganz aus Papier.
Ja geht das denn?
Ja, geht.
Aber das haben wir noch nie so gemacht.
Stimmt.

Das Smartbook.


Telefon

Weiterlesen

Veröffentlicht unter Allgemein, Bild, Mac, Satire | Hinterlasse einen Kommentar | 56 views

Ehrliche Mac-Dialoge

Veröffentlicht unter Bild, Mac, Satire | Verschlagwortet mit | Hinterlasse einen Kommentar | 6 views

Zensus 11 treibt immer seltsamere Blüten

Links: Atheismusfrage im Zensus [Science Blogs]

Veröffentlicht unter Bild, Mac, Piraten, Politik, Satire | 3 Kommentare | 8 views