Swift の static func と class func の違いは何ですか? 質問する

Swift の static func と class func の違いは何ですか? 質問する

Swift ライブラリでは次の定義を確認できます。

extension Bool : BooleanLiteralConvertible {
    static func convertFromBooleanLiteral(value: Bool) -> Bool
}

protocol BooleanLiteralConvertible {
    typealias BooleanLiteralType
    class func convertFromBooleanLiteral(value: BooleanLiteralType) -> Self
}

として定義されたメンバー関数static funcと として定義された別のメンバー関数の違いは何class funcですか? 単に は、static構造体と列挙型の静的関数用、およびclassクラスとプロトコル用ですか? 他に知っておくべき違いはありますか? 構文自体にこのような区別がある理由は何ですか?

ベストアンサー1

わかりやすくするために、ここで例を挙げます。

class ClassA {
    class func func1() -> String {
        return "func1"
    }
    
    static func func2() -> String {
        return "func2"
    }
}

/* same as above
    final class func func2() -> String {
        return "func2"
    }
*/

static funcと同じですfinal class func

なのでfinal、以下のようにサブクラスでオーバーライドすることはできません。

class ClassB: ClassA {
    override class func func1() -> String {
        return "func1 in ClassB"
    }
    
    // ERROR: Class method overrides a 'final` class method
    override static func func2() -> String {
        return "func2 in ClassB"
    }
}

おすすめ記事