Это больше похоже на XOR, поскольку переменная не может быть URL
и String
одновременно, но, чтобы ответить на ваш вопрос, вы не можете сделать это!
Но я думаю, вы уже это знаете, поскольку компилятор, вероятно, сказал вам:
Последовательные объявления в строке должны быть разделены ';'
Но если вы хотите, чтобы ValueToSet
было URL
, String
или Bool
. Это должно быть потому, что эти 3 типа имеют что-то общее, и это означает соответствие protocol
или inheritance
из базовый класс.
3 типа, которые вы указали, соответствуют
- CKRecordValueProtocol
- CustomReflectable
- CustomStringConvertible
- CVarArg
- Decodable
- Encodable
- Equatable
- Hashable
- MLDataValueConvertible
Итак, допустим, вы хотите иметь возможность использовать их как ключи в Dictionary
вы можете написать:
associatedtype ValueToSet where ValueToSet: Hashable
Это означает, что ValueToSet
может быть ЛЮБОЙ тип e соответствует Hashable
.
Но, поскольку вы, похоже, работаете с UserDefaults
, и его методы publi c для установки значений по умолчанию: не с использованием protocols
или классов.
например:
func set(_ url: URL?, forKey defaultName: String)
Этот подход не уведет вас далеко, вариант, предложенный Sweeper , вероятно, лучше всего подходит для вас.