Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

310
Vistas
Swift combina diferentes tipos en una matriz para mostrar datos para UITableView

Tengo tableview donde necesito mostrar algunas secciones. Debes imaginar esta mesa como una lista de reproducción de tus canciones. En la primera sección superior, necesito mostrar una celda con un botón que agregará más canciones a la lista de reproducción y otras secciones de la vista de tabla son títulos de encabezado de la categoría Música (como pop, rock, etc.). Cada una de estas secciones contiene celdas que son nombres de canciones.

Tengo una serie de canciones llamadas así: var songsGroups = [SongGroup] . Que es en realidad mi fuente de datos.

SongGroup contiene pocas propiedades:

 var categoryName: String var songs: [Songs]

Pero el problema aparece en el siguiente nivel. Cada vez que necesito verificar indexPath.section y hacer esto:

 if indexPath.section == 0 { // this is a section for ADD NEW SONG BUTTON cell no need in header title as there is no data repression only static text on the cell. } else { var musicCategoryName = songsGroups[indexPath.seciton - 1]. categoryName headerTitle.title = musicCategoryName }

Como puede ver, mi código se volvió mágico al agregar este genial número mágico -1 . Que reproduzco no me encanta en absoluto.

Como idea, seguro que puedo intentar combinar mi sección AGREGAR NUEVO BOTÓN DE CANCIÓN (agregando algún objeto adicional) con la matriz de songsGroups de canciones y crear NSArray para este propósito. Como en Objective-C como recordarás. Entonces, mi matriz de fuentes de datos se verá así:

 some NSArray = ["empty data for first cell", songsGroups[0], songsGroups[1]... etc]

Entonces, no hay necesidad de verificar ninguna sección en la que podamos confiar en nuestra matriz para construir todo e incluso si agregaré más celdas de datos vacías, no es necesario que maneje mi código a través de if block y agregue toneladas de números mágicos.

Pero el problema que veo aquí es que no usamos tipos explícitos de matriz y está molesto.

Entonces, tal vez conozcas soluciones más hermosas sobre cómo resolver mi problema.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puede introducir una enumeración de ayuda:

 enum Section { case empty case songCategory(categoryName: String, songs: [String]) }

Su fuente de datos se vería así:

 let datasource: [Section] = [.empty, .songCategory(categoryName: "Category1", songs: ["Song 1", "Song2"])]

Entonces ahora puede usar la coincidencia de patrones para llenar la vista de la tabla:

 let section = datasource[indexPath.section] if case let .songCategory(categoryName, songs) = section { headerTitle.title = categoryName } else { // this is a section for ADD NEW SONG BUTTON cell no need in header title as there is no data repression only static text on the cell. }
over 4 years ago · Santiago Trujillo Denunciar

0

No estoy seguro de haberte entendido bien. Pero me parece que quieres mostrar

1) algo que le permite al usuario agregar una nueva canción tocando un botón, y
2) una tabla de canciones, seccionadas en grupos.

Si este es el caso, ¿por qué no coloca el botón Agregar nueva canción en la vista del encabezado de la tabla y todos sus grupos de canciones y canciones en una matriz de 2 dim utilizada como fuente de datos?

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda