Created
October 27, 2017 11:56
-
-
Save OctoberHammer/bfb58b3ba1dff42a984a5b996b816cca to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//: 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