Несколько ограничений на параметр универсальной функции - PullRequest
0 голосов
/ 09 февраля 2019

Читая об универсальных функциях в Swift, я вижу, что можно наложить некоторые ограничения на параметр, требуя, чтобы он был подклассом заданного класса C или чтобы он реализовывал заданный протокол P. Но мне интересно,есть способ требовать и того и другого одновременно.Я еще ничего не нашел об этом.

Кто-нибудь знает?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Вы можете добавить любое количество ограничений типа, используя предложение where.Примеры:

import UIKit

func f<T>(t: T) where T: UIView, T: Encodable {}

class C<T> where T: UIView, T: Encodable {}
0 голосов
/ 09 февраля 2019

На самом деле Вы можете сделать это.

Если вы видели Codable в быстром режиме, это на самом деле Decodable и Encodable

 typealias Codable = Decodable & Encodable

Так что в некоторых функциях, если вы используете универсальный T в качестве Codable

struct StructOfCodable<T:Codable>: Codable {
     ....
}

Вот пример

protocol Test {}
class TClass {

}

typealias Common = Test & TClass

func generic <T:Common>(method:T) {

}

Другой способ - протокол и класс, оба могут иметь суперкласс.Таким образом, вы можете создать общий протокол

как

protocol CommonInProtocolAndStruct { }

protocol ProtocolUsedAsConstraint:CommonInProtocolAndStruct {} 

struct StructUsedAsConstraint:CommonInProtocolAndStruct {} 

И любой метод, который вы можете использовать CommonInProtocolAndStruct в качестве общего ограничения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...