У меня две структуры. Первый имеет только примитивные типы, а второй имеет тип первого и других примитивных типов. Моя проблема в том, что я пытаюсь создать новый экземпляр второго. Это мой пример кода:
struct Jugador{
var nombre:String=""
var posicion:String=""
var dorsal:Int=0
//Constructor
init(nombre:String,posicion:String,dorsal:Int){
self.nombre=nombre
self.posicion=posicion
self.dorsal=dorsal
}
}
struct Equipo{
//variable estatica registrar equipo
static var registrar:Int=0
var nombre:String=""
var estadio:String=""
var jugadores:[Jugador]=[Jugador]()
//Constructor con jugadores
init(nombre:String,estadio:String,jugadores:[Jugador]){
self.nombre=nombre
self.estadio=estadio
self.jugadores=jugadores
//al crear un equipo lo registro
Equipo.registrarEquipo()
}
//funcion que registra a un equipo
static func registrarEquipo(){
registrar+=1
}
}
var jugador1=Jugador(nombre:"portero",posicion:"portero",dorsal:1)
var jugador2=Jugador(nombre:"lateral",posicion:"defensa",dorsal:2)
var jugadores1=[jugador1,jugador2]
var equipo1=Equipo(nombre:"equipo1",estadio:"estadio1",jugadores:jugadores1)
Извините, моя ошибка в этой строке:
var equipo1=Equipo(nombre:"equipo1",estadio:"estadio1",jugadores:jugadores1)
это сообщение Недопустимый символ в исходном файле
Извините за испанские имена и комментарии, это просто пример, который я делаю, чтобы узнать о структурах
Я проверил ваши результаты, но он дает правильные результаты. Найти скриншот
Вот фрагмент кода:
struct Jugador{
var nombre:String
var posicion:String
var dorsal:Int
//Constructor
init(nombre:String,posicion:String,dorsal:Int){
self.nombre=nombre
self.posicion=posicion
self.dorsal=dorsal
}
}
struct Equipo{
//variable estatica registrar equipo
static var registrar:Int=0
var nombre:String=""
var estadio:String=""
var jugadores:[Jugador]=[Jugador]()
//Constructor con jugadores
init(nombre:String,estadio:String,jugadores:[Jugador]){
self.nombre=nombre
self.estadio=estadio
self.jugadores=jugadores
//al crear un equipo lo registro
Equipo.registrarEquipo()
}
//funcion que registra a un equipo
static func registrarEquipo(){
registrar+=1
}
}
var jugador1 = Jugador(nombre:"portero",posicion:"portero",dorsal:1)
var jugador2 = Jugador(nombre:"lateral",posicion:"defensa",dorsal:2)
var jugadores1 = [jugador1,jugador2]
var equipo1 = Equipo(nombre:"equipo1",estadio:"estadio1",jugadores:jugadores1)
print(equipo1)
И вот результат в Playground. Выполнено в Swift 3.1
Equipo(nombre: "equipo1", estadio: "estadio1", jugadores: [__lldb_expr_7.Jugador(nombre: "portero", posicion: "portero", dorsal: 1), __lldb_expr_7.Jugador(nombre: "lateral", posicion: "defensa", dorsal: 2)])
Ошибка "Недопустимый символ в исходном файле" на самом деле не связана с вашим кодом. Большую часть времени он вызван невидимым персонажем (без разрыва), который вы случайно набираете, нажимая опцию + Пробел. На неамериканских клавиатурах (французский в моем случае, испанский в вашем) вам часто приходится использовать ключ опциона для доступа к некоторым специальным символам. Когда вы печатаете быстро, это иногда приводит к тому, что вы нажимаете клавишу пробела перед тем, как отпустить клавишу выбора.
Я нашел обходное решение для этого. Посмотреть это сообщение: qaru.site/questions/501584/...
В двух словах я переконфигурировал ярлык Option + Space на то, что не создало бы ни одного символа в исходном файле.
Ваш код очень трудно прочитать. Вы должны рассмотреть следующие общепринятые рекомендации и добавить некоторые пробелы. Кроме того, принцип вашего кода почти прав.
Насколько мне известно, Structs, как правило, не предназначены для мутации, поэтому вам также следует подумать о том, чтобы сделать внутренние vars, если вам не нужно их менять. Вот пример:
struct Jugador {
let nombre: String
let posicion: String
let dorsal: Int
//Constructor
init(nombre: String, posicion: String, dorsal: Int) {
self.nombre = nombre
self.posicion = posicion
self.dorsal = dorsal
}
}
struct Equipo {
static var registrar: Int = 0
let nombre: String
let estadio: String
let jugadores: [Jugador]
//Constructor con jugadores
init(nombre: String, estadio: String, jugadores: [Jugador]){
self.nombre = nombre
self.estadio = estadio
self.jugadores = jugadores
Equipo.registrar += 1
}
}
let jugador1 = Jugador(nombre: "portero", posicion: "portero", dorsal: 1)
let jugador2 = Jugador(nombre: "lateral", posicion: "defensa", dorsal: 2)
let jugadores1 = [jugador1, jugador2]
let equipo1 = Equipo(nombre: "equipo1", estadio: "estadio1", jugadores: jugadores1)
equipo1.jugadores.first?.nombre
var
Equipo
для компиляции.