¿Cómo hacer que el ÍndicePath Rawepresentable? -- swift campo con xcode campo con indexpath camp Relacionados El problema

How to make IndexPath rawRepresentable?


1
vote

problema

Español

Estoy tratando de hacer un código de refactor y crear una clase enumio para mantener el índice de las celdas de vista de tabla.

Me gustaría hacer que el código funcione de esta manera:

  enum TableViewCell: IndexPath {      case shopImageView = [0,0]      case selectShopImageButton = [0,1] ... }   

, pero el compilador dice que el índicepath no es crimresentable. ¿Cómo hacer que el ÍndicePath Rawepresentable? El código actualmente funciona así y me gustaría mejorarlo.

  enum TableViewCell {     case shopImageView     case selectShopImageButton     case shopNameLocal     case shopNameEN     case addressLocal     case addressEN     case selectAddressButton     case openingHours     case datePickers     case phone     case email     case uploadShopFormButton      var indexPath: IndexPath {         switch self {         case .shopImageView: return [0,0]         case .selectShopImageButton: return [0,1]         case .shopNameLocal: return [0,2]         case .shopNameEN: return [0,3]         case .addressLocal: return [0,4]         case .addressEN: return [0,5]         case .selectAddressButton: return [0,6]         case .openingHours: return [0,7]         case .datePickers: return [0,8]         case .phone: return [0,9]         case .email: return [0,10]         case .uploadShopFormButton: return [0,11]         }     } }   
Original en ingles

I am trying to refactor code and create an enum class to hold indexPath of table view cells.

I would like to make the code works this way:

enum TableViewCell: IndexPath {      case shopImageView = [0,0]      case selectShopImageButton = [0,1] ... } 

, but the compiler says indexPath is not rawRepresentable. How to make indexPath rawRepresentable? The code currently works like this and I would like to improve it.

enum TableViewCell {     case shopImageView     case selectShopImageButton     case shopNameLocal     case shopNameEN     case addressLocal     case addressEN     case selectAddressButton     case openingHours     case datePickers     case phone     case email     case uploadShopFormButton      var indexPath: IndexPath {         switch self {         case .shopImageView: return [0,0]         case .selectShopImageButton: return [0,1]         case .shopNameLocal: return [0,2]         case .shopNameEN: return [0,3]         case .addressLocal: return [0,4]         case .addressEN: return [0,5]         case .selectAddressButton: return [0,6]         case .openingHours: return [0,7]         case .datePickers: return [0,8]         case .phone: return [0,9]         case .email: return [0,10]         case .uploadShopFormButton: return [0,11]         }     } } 
        

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

Otra forma de usar el código duro TableView IndexPath 'S TO UTILIZAR UN enum con propiedades estáticas. El beneficio de hacer esto es que si hace referencia al custom0 en varios métodos de delegado, y necesita cambiar el 99887776612 Referencias, Entonces solo tienes que cambiarlos una vez en el enum.

  custom3  

y luego puedes hacer referencia a ellos como este:

  custom4  
 

Another way of using hard coded TableView IndexPath's is to use an enum with static properties. The benefit of doing this is that if you reference the IndexPath's in various TableView delegate methods, and you need to change the IndexPath references, then you only have to change them once in the enum.

 private enum TableIndex {     // Section 0: Information     static let information =        IndexPath(row: 0, section: 0)     // Section 1: Preferences     static let notifications =      IndexPath(row: 0, section: 1)     static let units =              IndexPath(row: 1, section: 1)     static let hapticFeedback =     IndexPath(row: 2, section: 1)     // Section 2: Links     static let leaveReview =        IndexPath(row: 0, section: 2)     static let support =            IndexPath(row: 1, section: 2)     static let privacyPolicy =      IndexPath(row: 2, section: 2)     static let disclaimer =         IndexPath(row: 3, section: 2) } 

and you can then reference them like this:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {     switch indexPath {     case TableIndex.information:         // do something     case TableIndex.notifications:         // do something     case TableIndex.units:         // do something          // etc      default:         break     } } 
 
 
1
 
vote

Hay otras formas pero no necesariamente mejores, de todos modos, puede reducir el código a esto.

  custom5  

También tenga en cuenta que también está dependiendo de cómo los use, como dónde, y cómo está pasando los argumentos.

una de las formas.

  custom6  
 

There are other ways but not necessarily better, anyways you can cut down the code to this .

enum TableViewCell: Int  { case shopImageView = 0 case selectShopImageButton = 1 case shopNameLocal = 2 case shopNameEN = 3 case addressLocal case addressEN case selectAddressButton case openingHours case datePickers case phone case email case uploadShopFormButton  var indexPath: IndexPath {  return [0, self.rawValue] } 

Also keep in mind it is also depending on how are you using them, like where, and how are you passing the arguments .

One of the ways .

extension IndexPath {      init(using type: TableViewCell) {         self.init(row: type.rawValue, section: 0)     } }  let indexPath = IndexPath(using: .shopNameEN) 
 
 

Relacionados problema

2  ScrollTorow no funciona cuando dicha fila está cerca de la parte inferior de la vista de la tabla  ( Scrolltorow does not work when said row is near the bottom of the table view ) 
Tengo una clase celular que implementa un delegado del campo de texto. En este delegado, estoy llamando a una función para decirle a TableView para desplazars...

0  IOS / SWIFT: PASS OBJETO EN LA TABLEVIA PARA DETALLAR EL CONTROLADOR DE VISTA  ( Ios swift pass object in tableview to detail view controller ) 
Estoy tratando de agarrar un objeto de una TEBEVIA y pasarlo a una vista detallada, algo que sé cómo hacerlo en Objective-C, pero estoy aprendiendo por primer...

-1  ¿Actualizando a Coredata a través de UISWIPEGESTORURINGNIVERNIZNIERNIZADOR en UstedViewcell personalizado?  ( Updating coredata through uiswipegesturerecognizer on custom uitableviewcell ) 
Estoy añadiendo un gesto de deslizar personalizada en un UITableViewCell que las actualizaciones de CoreData cuando se pasó una celda específica. Sin emba...

2  'Solicitud de excepción de ruta de índice no válido' en la célula  ( Request for rect at invalid index path exception on cell tap ) 
Estoy trabajando en la barra de búsqueda con función Autofill. A veces recibo estos errores al tocar la celda en Autofill TableView : *** Fallo de afirmac...

1  No es capaz de eliminar fila en un índice  ( Not able to delete row at an indexpath ) 
Tengo algunas celdas de TablaView con algunos datos sobre ellos y las celdas tienen un botón cruzado (en la parte superior derecha) en el clic en el cual la c...

0  Eliminar celda TableView desde el botón dentro de él  ( Delete tableview cell from button inside it ) 
Quiero que mi código SWIFT elimine la celda TableView desde el botón dentro de la celda. Si el usuario llega al botón Eliminar de la celda con la etiqueta que...

0  Cambiar color de la sección individual en UicollectorView  ( Change color of individual section in uicollectionview ) 
Mi pregunta para hoy que he estado tratando de averiguar un rato, pero lo que realmente es buggy o no funciona porque no está claro cómo implementarlo es cómo...

2  Obtenga el índice del elemento relevante en un bucle  ( Get the indexpath of the relevant element in a loop ) 
Estoy trabajando en un proyecto en Swift 3.0 y tengo un bucle que me daría el estado de un objeto (le da un valor booleano en una secuencia de matriz). Mi req...

1  Quiero obtener datos específicos con hacer clic en la celda Vista de colección con el análisis de JSON  ( I want to get specific data with clicking on collection view cell with parsing j ) 
Tengo una vista de colección y matriz JSON. Quiero obtener datos específicos en otra vista tocando la colección Vista celular. Solía ​​obtener datos usando et...

0  ¿Cómo obtener la tabla seleccionada Vista de la fila de celda en SEGUE?  ( How to get selected table view cell row in segue ) 
Estoy desarrollando una aplicación de iOS usando SWIFT y tengo un controlador de visualización que Segues de una vista de contenido de celda de vista de tabla...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos