L oop через NSArray и скопируйте в новый быстрый массив - PullRequest
0 голосов
/ 16 апреля 2020

Эй, ребята, я очень новичок в Swift и я пытаюсь l oop через NSArray, импортированный из plist, который я затем хочу заполнить двумерным быстрым массивом списком CGPoints.

Мой plist установить для каждой буквы алфавита, внутри каждой буквы у меня есть массив [] [] первая строка - штрихи, а вторая строка - координаты x, y.

enter image description here

Мои переменные:

var letterPoints: NSDictionary?
var letterPointsArray: NSArray?
var letterCGPoints = [[Any]]()

Мой код:

    letterPoints = NSDictionary(contentsOfFile: Bundle.main.path(forResource: "LetterPoints", ofType: "plist")!)
    letterPointsArray = (letterPoints?.value(forKey: image)) as? NSArray

    var i = 0
    for strokes in letterPointsArray! as! [[Int]]
    {
        for points in strokes
        {
            let x = strokes[i][0] // Error Value of type 'Int' has no subscripts.
            let y = strokes[i][1]

            letterCGPoints[i].append(CGPoint(x: x,y: y))
        }
        i = i+1
    }

Я получаю сообщение об ошибке при назначении x и y - значение типа 'Int' не имеет индексов.

Первоначально у меня это работало, когда я настраивал его без дополнительной строки для каждого штриха, но после превращения его в двумерный массив я сейчас с трудом работаю с ним, и я совершенно растерялся, пытаясь найти правильный способ собираюсь об этом из моих онлайн-поисков и просматриваю stackoverflow. Прошу прощения за мое невежество и полное отсутствие знаний в swift, буду очень признателен за несколько советов, как лучше всего решить эту проблему. Спасибо:)

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020

Объявите ваш массив правильно с самого начала

var letterPointsArray: [[[Int]]]?

и затем приведите его непосредственно

letterPointsArray = (letterPoints?.value(forKey: "image")) as? [[[Int]]]

или даже лучше в одну строку

 let letterPointsArray = (letterPoints?.value(forKey: "image")) as? [[[Int]]]

И используя enumerated(), вы можете перебирать массив

if let letterPointsArray = (letterPoints?.value(forKey: "image")) as? [[[Int]]] {
    for (i, strokes) in letterPointsArray.enumerated() {
0 голосов
/ 16 апреля 2020

Проверьте ваш массив штрихов. Следующий код может работать.

let points: [[Int]] = [[10, 20], [30, 40]]
        var i = 0
        var j = 1
        for point in points {
            let a = point[i]
            let b = point[j]
            print(a,b)
        }
        i+=1
        j+=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...