swift 单身与静态功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift 单身与静态功能相关的知识,希望对你有一定的参考价值。

//: Playground - noun: a place where people can play

import UIKit
import Foundation
import PlaygroundSupport
//https://habrahabr.ru/post/103681/

protocol MyProtocol{
    //Можем объявить статическую функцию в протоколе
    static func someFunc()-> String
}


extension MyProtocol {
    //И реализовать ее в расширении
    static func someFunc()-> String {
        return "Hello, world"
    }
}
class MyClass {
    static func someFunc()-> String {
        return "Hello, world"
    }
}

print(MyClass.someFunc())

//Можем создать класс, который будет наследоваться - либо от протокола, либо от класса со стаnической функцией
class AnotherClass: MyProtocol {}
class ThirdClass: MyClass {}
//И статическая функция будет уже определена
print(AnotherClass.someFunc())
print(ThirdClass.someFunc())

//Либо мы ее сможем переопределить, при необходимости
class ForthClass: MyProtocol {
    func someFunc()-> String {
        return "Fervell, world"
    }
}


//В статье сказано, что инстанс (в случае синглотона) мы можем передавать в функции в качестве значения параметра, а "статический класс" не можем.
//Не знаю, что такое статический класс в Свифте (у меня не получилось сделать класс статическим), но если мы в какой-то функции хотим доступится только к статическим функциям какого-то класса, которые определены в протоколе, то делаем так
func someFunc(SomeClass:MyProtocol.Type) {
    print(SomeClass.someFunc())
}

//Придется сделать инлайн-инстанс, и от него взять тип.
someFunc(SomeClass: type(of: AnotherClass.init()))

//Ну сериализовать наверное действительно нельзя

以上是关于swift 单身与静态功能的主要内容,如果未能解决你的问题,请参考以下文章

swift 斯威夫特单身人士

swift 单身人士班

swift 斯威夫特 - 单身人士

swift 斯威夫特单身课

swift 斯威夫特的单身人士

swift 斯威夫特的单身人士