Estoy creando UILabe usando For loop by characters de la base de datos SQLite, ¿cómo puedo hacer eso?

Este es mi código:

for data in listdata {
    for tar in [data.ans.characters] as NSArray {
        var counter = ""
        counter = tar as! String
        let targetLabel = UILabel(frame: CGRect(x: xAxis, y: yAxis, width: 50, height: 50))
        targetLabel.backgroundColor = .white
        targetLabel.layer.masksToBounds = true
        targetLabel.layer.cornerRadius = 5
        targetLabel.text = counter
        targetLabel.textAlignment = .center
        self.view.addSubview(targetLabel)
    }
}

data.ans son datos de cadena y lo convierto en una matriz de caracteres y se deriva de listdata, cuando escribo el código anterior, ¡me cuelgo! y su masaje es:

No se pudo lanzar el valor del tipo 'Swift.String.CharacterView'

Y cuando edito mi código a:

for data in listdata {
    for tar in AnyObject[data.ans.characters] as NSArray { // Instance member 'subscript' cannot be used on type 'AnyObject'
        var counter = ""
        counter = tar as String
        let targetLabel = UILabel(frame: CGRect(x: xAxis, y: yAxis, width: 50, height: 50))
        targetLabel.backgroundColor = .white
        targetLabel.layer.masksToBounds = true
        targetLabel.layer.cornerRadius = 5
        targetLabel.text = counter
        targetLabel.textAlignment = .center
        self.view.addSubview(targetLabel)
    }
}

Obtener mensaje de error:

El miembro de instancia 'subíndice' no se puede usar en el tipo 'AnyObject'

¿Qué se resuelve? ¿Y cómo puedo recorrer UILabel en el número de caracteres de la base de datos SQLite?

Quiero crear así en la imagen pero desde la base de datos SQLite (data.ans):

enter image description here

1
Ameen MK 14 jul. 2017 a las 16:35

2 respuestas

La mejor respuesta

La propiedad characters ya es iterable. Tienes otros dos problemas:

  1. Debes convertir tar a String para asignarlo a la propiedad .text
  2. Debe agregar el width más un delta a x para cada iteración

Código

import UIKit
import PlaygroundSupport

let view = UIView(frame: CGRect(x: 0, y: 0, width: 345, height: 70))

class Data {
    var ans = "LONDON"
}
var data = Data()
var x = 10
var y = 10
for tar in data.ans.characters {
    let targetLabel = UILabel(frame: CGRect(x: x, y: y, width: 50, height: 50))
    x += 50 + 5
    targetLabel.backgroundColor = .white
    targetLabel.layer.masksToBounds = true
    targetLabel.layer.cornerRadius = 5
    targetLabel.text = String(tar)
    targetLabel.textAlignment = .center
    view.addSubview(targetLabel)
    let xString = String(format: "%\(03)d", x)
    print("x = \(xString), tar = \(tar)")
}

PlaygroundPage.current.liveView = view
PlaygroundPage.current.needsIndefiniteExecution = true

Esto se ejecutó en un patio de recreo de Swift.

LONDON

Seleccione Ver -> Editor asistente -> Mostrar editor asistente en el menú para ver el UIView.

Salida

x =  65, tar = L
x = 120, tar = O
x = 175, tar = N
x = 230, tar = D
x = 285, tar = O
x = 340, tar = N
1
David Cullen 14 jul. 2017 a las 18:24

Cambiar esta línea

for tar in [data.ans.characters] as NSArray {

A este

for tar in listdata {
0
David Cullen 14 jul. 2017 a las 14:10