Подтвердить что ты не робот

Определение явного преобразования для пользовательских типов в Swift

В настоящее время лучший/предпочтительный способ определения явных преобразований в Swift? В верхней части головы я могу думать о двух:

  • Создание пользовательских инициализаторов для типа назначения через расширение, например:

    extension String {
      init(_ myType: MyType) {
        self = "Some Value"
      }
    }
    

    Таким образом, вы можете просто использовать String(m), где m имеет тип MyType, чтобы преобразовать m в строку.

  • Определение toType -Methods в исходном типе, например:

    class MyType {
      func toString() -> String {
        return "Some Value"
      }
    }
    

    Это сопоставимо с Swift String.toInt(), которое возвращает Int?. Но если бы это был окончательный путь, я бы ожидал, что для этого будут протоколы для базовых типов, такие как инверсия уже существующих протоколов *LiteralConvertible.

Подпроцесс: ни один из двух методов не позволяет компилировать что-то подобное: let s: MyString = myTypeInstance (as String) (часть в скобках необязательна), но если я правильно понимаю, оператор as предназначен только для downcasting в иерархиях типов, это правильно?

4b9b3361

Ответ 1

Образец, используемый в swift, является инициализатором. Так, например, при преобразовании Int в UInt нам нужно написать:

var i: Int = 10
var u: UInt = UInt(i)

Я бы придерживался этого шаблона.

Что касается подзапроса, в документации указано, что:

Тип casting - это способ проверить тип экземпляра и/или обрабатывать этот экземпляр, как если бы он был другим суперклассом или подклассом из другого места в своей собственной иерархии классов.

и

Вы также можете использовать литье типов, чтобы проверить, соответствует ли тип протоколу

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

Это можно протестировать простым способом:

var i: Int = 10
var u: UInt = i as UInt

Это порождает ошибку:

'Int' is not convertible to 'UInt'

Подробнее о Тип Casting