allaboutapps / DataSource

Simplifies the setup of UITableView data sources using type-safe descriptors for cells and sections. Animated diffing built-in.
MIT License
74 stars 10 forks source link

Naming-Conflict with Nested Classes or Structs #14

Open wieweb opened 6 years ago

wieweb commented 6 years ago
class TestOne {
    struct Item {
        let value: String
    }
}

class TestTwo {
    struct Item {
        let value: Int
    }
}

dataSource.sections = [Section(items: [TestOne.Item(value: "Hello"), TestTwo.Item(value: 5)])]

This will force a crash because String(describing: type(of: item) will always return Item instead of needed TestOne.Item, TestTwo.Item. So all Items do have the same identifier and cellDescriptor will fail.

SooperCode commented 6 years ago

String(reflecting: type(of: item)) could be used instead. It returns the full class name. Including Module though, e.g. MyApp.TestOne.Item (if you try it in Playground it'll be something like __lldb_expr_77.TestOne.Item)