When is AnyObject not AnyObject? When it’s a protocol type.
Run-time Polymorphism in Swift
This has come up several times on the forums over the years, but I’ve never written it up in a standard place, so here it is: There are only three ways to get run-time polymorphism in Swift. Well, three and a half.
GitMounter
A few days ago Julia Evans posted this:
has anyone made a read-only FUSE filesystem for a git repository where every commit is a folder and the folder contains all the files in that commit?
the idea is that you could just run
cd COMMIT_ID
and poke around instead of checking out the commitand maybe the branches could be symbolic links to the commit folders?
And I did in fact do something very like that, back when I was playing with FUSE! But I never put it up anywhere cause it had an annoying build process, and didn’t seem to add much, and—
Older Posts
- 2023-10-04 There's No Such Thing As "Implicitly Atomic"
- 2023-01-22 Rescuing Files From Classic Mac OS...with Swift!
- 2022-11-28 The Two Faces of Codable/Serde
- 2022-10-09 Swift was always going to be part of the OS
- 2022-04-24 Default Arguments and Label-based Overloading
- 2022-03-02 UnsafeMutableRawBufferPointer
- 2021-12-31 Swift Regrets: Wrap-up
- 2021-12-30 Swift History: Assignment Methods
- 2021-12-28 Swift Regret: inout Syntax
- 2021-12-26 Swift Delight: Optional Conveniences
- 2021-12-23 Swift Regret: try?
- 2021-12-21 Swift Delight: try
- 2021-12-17 Swift Regret: Operator Function Lookup Rules
- 2021-12-15 Swift Regret: "Double" rather than "Float64"
- 2021-12-10 Swift Delight: Implicit Member Syntax
- 2021-12-08 Swift Regret: Weak Vars in Structs
- 2021-12-03 Swift Regret: Lazy Vars in Structs
- 2021-11-30 Swift Delight: No Unused Results
- 2021-11-24 Swift Regret: Open Protocols
- 2021-11-21 Swift Regret: Retroactive Conformances
- 2021-11-18 Swift Delight: Library Evolution
- 2021-11-10 Swift Mangling Regret: Private Discriminators
- 2021-11-05 Swift Mangling Regret: The "Old" Mangling
- 2021-11-03 Swift Mangling Regret: Library Evolution
- 2021-10-29 Swift Delight: #available
- 2021-10-22 Swift Regret: Implicitly-Hashable Payloadless Enums
- 2021-10-20 Swift Regret: Top-Level Decls in Script Mode
- 2021-10-15 Swift Delight: Names for Generic Parameters
- 2021-10-13 Swift Regret: Generic Parameters Aren't Members
- 2021-10-08 Swift Regret: OpaquePointer
- 2021-10-06 Swift Regret: Unannotated C Enums
- 2021-10-01 Swift Delight: Value Semantics Collections
- 2021-09-29 Swift Delight: guard
- 2021-09-24 Swift Regret: Inferred Property Types
- 2021-09-22 Swift Regret: Implicit Optional Initialization
- 2021-09-17 Swift Regret: Subscript Trailing Closures
- 2021-09-15 Swift Regret: Subscript Argument Label Rules
- 2021-09-10 Swift Regrets
- 2021-09-10 Swift Regret: Unapplied Instance Methods
- 2021-09-08 Swift Regret: Bound Methods
- 2021-08-29 Swift Regret: Type-based Overloading
- 2021-08-25 Swift Regret: AnyObject Dispatch
- 2021-08-20 Swift Regret: Labeled Tuple Elements
- 2021-08-18 Swift Regret: Tuples and Argument Lists
- 2021-08-13 Swift Regret: Sequence
- 2021-08-11 Swift Regret: mutating Protocol Methods vs. Classes
- 2021-08-06 Swift Regret: NSUInteger
- 2021-08-04 Swift Regret: Protocol Syntax
- 2020-10-20 The Swift Runtime: Enums
- 2020-10-06 The Swift Runtime: Class Metadata Initialization
- 2020-09-29 The Swift Runtime: Class Metadata
- 2020-09-21 The Swift Runtime: Uniquing Caches
- 2020-09-14 The Swift Runtime: Type Metadata
- 2020-09-07 The Swift Runtime: Type Layout
- 2020-08-31 The Swift Runtime: Heap Objects
- 2020-08-26 Objective-Rust
- 2020-07-07 Suffusion: Playing with Filesystems
- 2020-05-24 ROSE-8 on Mac OS 9
- 2020-04-01 Swift on Mac OS 9
- 2019-11-01 Leaving Apple
- 2019-02-21 A Shiny Magic Number
- 2018-04-03 "FIXME" Doesn't Always Mean "Fix Me"
- 2018-02-26 Many-to-Many Protocols
- 2017-09-07 The New Kingdom of Nouns