Не удается получить доступ к указанному c Struct в массиве на swift. Продолжайте получать эту ошибку "Невозможно вызвать значение нефункционального типа" "" - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь читать и / или печатать на консоли элементы моего массива, которые состоят из 28 структур. Я не могу получить доступ к какой-либо структуре в моем массиве, это говорит, что "Невозможно вызвать значение нефункционального типа '[Ficha]'", и я не могу найти почему .. Извините, вид новичка ie на swift .. В комментируемом разделе я обнаружил проблему, но даже не могу напечатать один из элементов.

Пожалуйста, помогите

import UIKit
import Foundation

struct Ficha {
    var numero: Int
    var ladoA = 0
    var ladoB = 0
}

extension Ficha: CustomStringConvertible {
    var description: String {
        return "f\(numero) \(ladoA)/\(ladoB)"
    }
}

var dSet = [Ficha] ()
var rSet = [Int: Ficha] ()


func setDset () {
    dSet = []
    rSet = [:]
    var fj = 0
    var x1: Double = 0
    var ficha1 : Ficha


    var fichanum = 0
    for x in 0...6 {
        for y in x...6 {
            fichanum = fichanum + 1
            dSet.append(Ficha.init(numero: fichanum, ladoA: x, ladoB: y))
        }
    }
    dSet.shuffle()
}

setDset()    
print (dSet(2))

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Использование dSet с круглыми скобками неверно, это синтаксис функции. Поэтому строка:

print(dSet(2))

предполагает, что есть функция, которая возвращает что-то:

func dSet(_ x: Int) -> Something {
  return Something
}

Для доступа к элементу по индексу вы используете квадратные скобки, поэтому должно быть:

print(dSet[2])

, который будет печатать элемент с индексом 2 в массиве dSet.

0 голосов
/ 28 апреля 2020

Как уже отмечали другие, вы получаете доступ к членам коллекции с помощью подписок, которые вызываются с помощью [], а не () (для обычных вызовов функций).

Вы можете упростить этот код совсем немного, кстати:

import UIKit

struct Ficha {
    var numero: Int
    var ladoA = 0
    var ladoB = 0
}

extension Ficha: CustomStringConvertible {
    var description: String {
        return "f\(numero) \(ladoA)/\(ladoB)"
    }
}

func calculateDset() -> [Ficha] {   
    let xyPairs = (0...6).flatMap { x in
        (x...6).map { y in (x: x, y: y) }
    }

    return zip(1..., xyPairs)
        .map { (fichanum, pair) in
            return Ficha(numero: fichanum, ladoA: pair.x, ladoB: pair.y)
        }
        .shuffled()
}

let dSet = calculateDset()
print(dSet[2])
  1. UIKit уже импортирует Foundation
  2. Сделайте функции возвращающими значения, не устанавливайте их напрямую.
  3. Не установлен начальные значения переменных, только для немедленной перезаписи их чем-то другим.
  4. rSet, fj, x1 и ficha1 не используются, удалите их.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...