Skip to content

Instantly share code, notes, and snippets.

@OctoberHammer
Created October 27, 2017 11:56
Show Gist options
  • Save OctoberHammer/bfb58b3ba1dff42a984a5b996b816cca to your computer and use it in GitHub Desktop.
Save OctoberHammer/bfb58b3ba1dff42a984a5b996b816cca to your computer and use it in GitHub Desktop.
//: 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()))
//Ну сериализовать наверное действительно нельзя
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment