46

Is there a way to add method at class level or struct level in swift?

struct Card {
    var rank: Rank
    var suit: Suit
    func simpleDescription() -> String {
        return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"
    }
}

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/us/jEUH0.l

Now if you wanted to add a method that creates a full deck of cards, what would be the best way to accomplish it?

Jhonghee
  • 670
  • 1
  • 6
  • 10

3 Answers3

91

To add a type-level method in a class, add the class keyword before the func declaration:

class Dealer {
    func deal() -> Card { ... }
    class func sharedDealer() -> Dealer { ... }
}

To add a type-level method in a struct or enum, add the static keyword before the func declaration:

struct Card {
    // ...
    static func fullDeck() -> Card[] { ... }
}

Both are generally equivalent to static methods in Java or class methods (declared with a +) in Objective-C, but the keyword changes based on whether you're in a class or struct or enum. See Type Methods in The Swift Programming Language book.

rickster
  • 124,678
  • 26
  • 272
  • 326
  • This has been updated in 6.3, for what it's worth: http://adcdownload.apple.com//Developer_Tools/Xcode_6.3_beta/Xcode_6.3_beta_Release_Notes.pdf Cheers – Chris Conover Feb 11 '15 at 00:50
  • Classes have both "static" and "class" funcs. See following answer for explanation http://stackoverflow.com/a/29636742/2774520 – Oleksii Nezhyborets Aug 13 '16 at 21:49
31

In Struct:

struct MyStruct {
    static func something() {
        println("Something")
    }
}

Called via:

MyStruct.something()

In Class

class MyClass {
    class func someMethod() {
        println("Some Method")
    }
}

called via:

MyClass.someMethod()
Logan
  • 52,262
  • 20
  • 99
  • 128
8

p 353

class SomeClass {
    class func someTypeMethod() {
        // type method implementation goes here
    }
}
SomeClass.someTypeMethod()

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/us/jEUH0.l

Gene De Lisa
  • 3,628
  • 1
  • 21
  • 36