быстрые перечисления w Objective-C typedefs в Kotlin - PullRequest
0 голосов
/ 16 ноября 2018

Я перевожу некоторую бизнес-логику из iOS в Kotlin, и эта конструкция мне кажется странной

// AttachmentType.h
typedef NS_ENUM(NSUInteger, AttachmentType) {
    AttachmentType1 = 0,
    AttachmentType2 = 1,
    AttachmentType3 = 2
}


// PhotoType.swift
enum PhotoType {
    case t1(AttachmentType1), t2(AttachmentType1), t3(AttachmentType1)

    var attachmentType: AttachmentType {
        switch self {
        case .t1(let type):
            return type
        case .t3(let type):
            return type
        case .t3(let type):
            return type
        }
    }
}

Что меня смущает, так это ивар attachmentType

  1. это по сути переменная типа AttachmentType?

  2. позволяет ли это все 9 перестановок двух типов.Например: могу ли я создать экземпляр PhotoType, который представляет AttachmentType1 с t1, AttachmentType1 с t2, AttachmentType1 с t3, AttachmentType2 с t1 и т. д. ...

  3. Какая эквивалентная конструкция для Kotlin?9 закрытых классов?

1 Ответ

0 голосов
/ 16 ноября 2018
  1. PhotoType использует перечисление "ассоциированное значение"

  2. позволяет создавать 9 случаев безопасным для типов способом.

  3. следующая структура в Котлине достигает той же цели:

`` `

sealed class PhotoType {
  abstract val type: AttachmentType
}

data class t1(override val type: AttachmentType) : PhotoType()
data class t2(override val type: AttachmentType) : PhotoType()
data class t3(override val type: AttachmentType) : PhotoType()

`` `

...