Создайте 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
свойство уже итерируемо. У вас есть две другие проблемы:
- Вам нужно конвертировать
tar
кString
назначить его.text
имущество - Вам нужно добавить
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 {