Создайте UILabel с циклом по символам из базы данных

Я создаю UILabe используя цикл For символов из базы данных SQLite, как я могу это сделать?

Это мой код:

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 это строковые данные, и я преобразую в массив символов, и он получен из listdata, когда я наберу предыдущий код, я получаю сбой! и его массаж:

Не удалось привести значение типа 'Swift.String.CharacterView'

И когда редактировать мой код для:

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)
    }
}

Принеси мне ошибку массажа:

Элемент экземпляра "индекс" не может использоваться для типа "AnyObject"

Что решить? И как я могу зациклить UILabel на количество символов из базы данных SQLite?

Я хочу создать как это на картинке, но из базы данных SQLite (data.ans):

введите описание изображения здесь

2 ответа

Решение

characters свойство уже итерируемо. У вас есть две другие проблемы:

  1. Вам нужно конвертировать tar к String назначить его .text имущество
  2. Вам нужно добавить width плюс некоторая дельта в x за каждую итерацию

Код

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

Это было запущено на детской площадке Swift.

ЛОНДОН

Выберите View -> Assistant Editor -> Show Assistant Editor из меню, чтобы увидеть UIView,

Выход

x =  65, tar = L
x = 120, tar = O
x = 175, tar = N
x = 230, tar = D
x = 285, tar = O
x = 340, tar = N

Изменить эту строку

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

к этому

for tar in listdata {
Другие вопросы по тегам