Liaison de modèles à des actifs sur Swift Playgrounds pour iPad (pas de Xcode) - Tutoriels de développement d'applications iOS

StackOverflow. Ceci est mon premier message posté. Veuillez excuser tout problème de format.

J'ai essayé de m'apprendre le développement iOS afin de créer une application pour m'aider au travail (je suis agriculteur). Je ne possède pas d'ordinateur Mac et je ne suis pas en mesure d'en obtenir un actuellement, ce qui signifie pas de Xcode, mais j'ai un iPad. Récemment, Apple a rendu possible le développement et la publication d'applications depuis iPad sur Swift Playgrounds.

J'ai parcouru Internet à la recherche de didacticiels spécifiques à Playgrounds et je n'ai pas trouvé beaucoup de choses, je suppose parce que la fonctionnalité est relativement nouvelle. Les meilleurs tutoriels SwiftUI que j'ai trouvés proviennent des tutoriels de développement d'applications iOS d'Apple. Je travaille maintenant sur le code de Scrumdinger et j'ai rencontré un problème avec les couleurs définies dans un dossier Assets dans Xcode à partir de fichiers.json.

Veuillez vous référer à cette structure pour ma question:

import Foundation
struct DailyScrum {
var title: String
var attendees: [String]
var lengthInMinutes: Int
var theme: Theme
}
extension DailyScrum {
static let sampleData: [DailyScrum] =
[
DailyScrum(title: "Design", attendees: ["Cathy", "Daisy", "Simon", "Jonathan"], lengthInMinutes: 10, theme:.yellow),
DailyScrum(title: "App Dev", attendees: ["Katie", "Gray", "Euna", "Luis", "Darla"], lengthInMinutes: 5, theme:.orange),
DailyScrum(title: "Web Dev", attendees: ["Chella", "Chris", "Christina", "Eden", "Karla", "Lindsey", "Aga", "Chad", "Jenn", "Sarah"], lengthInMinutes: 5, theme:.poppy)
]
}

This piece of code from Apple's tutorial

import SwiftUI
struct CardView: View {
let scrum: DailyScrum

var body: some View {
VStack(alignment:.leading) {
Text(scrum.title)
.font(.headline)
Spacer()
HStack {
Label("\(scrum.attendees.count)", systemImage: "person.3")
Spacer()
Label("\(scrum.lengthInMinutes)", systemImage: "clock")
.labelStyle(.trailingIcon)
}
.font(.caption)
}
.padding()
.foregroundColor(scrum.theme.accentColor)
}
}
struct CardView_Previews: PreviewProvider {
static var scrum = DailyScrum.sampleData[0]
static var previews: some View {
CardView(scrum: scrum)
.background(scrum.theme.mainColor)
.previewLayout(.fixed(width: 400, height: 60))
}
}

est censé générer cet aperçu sur Xcode. Cependant, c'est ce que j'obtiens sur iPad Playgrounds. La couleur et la taille de l'aperçu sont désactivées. Je ne me soucie pas vraiment de la taille de l'aperçu, car cela n'affecte pas l'application (cette carte sera affichée dans une liste et aura la taille appropriée plus tard), mais j'aimerais obtenir la bonne couleur.

La structure Theme utilisée pour spécifier les couleurs est définie dans le fichier Theme.swift:

import SwiftUI
enum Theme: String {
case bubblegum
case buttercup
case indigo
case lavender
case magenta
case navy
case orange
case oxblood
case periwinkle
case poppy
case purple
case seafoam
case sky
case tan
case teal
case yellow

var accentColor: Color {
switch self {
case.bubblegum,.buttercup,.lavender,.orange,.periwinkle,.poppy,.seafoam,.sky,.tan,.teal,.yellow: return.black
case.indigo,.magenta,.navy,.oxblood,.purple: return.white
}
}
var mainColor: Color {
Color(rawValue)
}
}

Et les couleurs spécifiées dans l'énumération sont.json Assets in Xcode avec cette structure de dossiers. Cependant, le didacticiel en ligne ne précise pas comment Xcode sait les rechercher sans aucune référence explicite à ces dossiers ou fichiers.json dans le code de Theme.swift.

J'ai essayé de recréer la même structure de dossiers dans Playgrounds (ce qui était pénible car vous ne pouvez pas importer de dossiers), mais ma sortie n'a pas changé.

Donc, voici mes questions:

  • Comment Xcode relie-t-il les actifs aux modèles de données personnalisés (tels que l'énumération dans Theme.swift) qui ne le référencent pas spécifiquement ? Puis-je reproduire cela avec juste du code dans Swift Playgrounds sur iPad?

  • Si je ne peux pas le faire dans Swift Playgrounds, ai-je une alternative pour créer des couleurs personnalisées et les faire fonctionner avec l'énumération dans Theme.swift?

  • Merci beaucoup.


    Solution du problème

    Suite à la suggestion de @loremipsum, j'ai remplacé la mainColorpropriété de l' Themeénumération par

    var mainColor: Color {
    switch self {
    case.bubblegum: return Color(red: 0.933, green: 0.502, blue: 0.820)
    case.buttercup: return Color(red: 1.000, green: 0.945, blue: 0.588)
    case.indigo: return Color(red: 0.212, green: 0.000, blue: 0.443)
    case.lavender: return Color(red: 0.812, green: 0.808, blue: 1.000)
    case.magenta: return Color(red: 0.647, green: 0.075, blue: 0.467)
    case.navy: return Color(red: 0.000, green: 0.078, blue: 0.255)
    case.orange: return Color(red: 1.000, green: 0.545, blue: 0.259)
    case.oxblood: return Color(red: 0.290, green: 0.027, blue: 0.043)
    case.periwinkle: return Color(red: 0.525, green: 0.510, blue: 1.000)
    case.poppy: return Color(red: 1.000, green: 0.369, blue: 0.369)
    case.purple: return Color(red: 0.569, green: 0.294, blue: 0.949)
    case.seafoam: return Color(red: 0.796, green: 0.918, blue: 0.898)
    case.sky: return Color(red: 0.431, green: 0.573, blue: 1.000)
    case.tan: return Color(red: 0.761, green: 0.608, blue: 0.494)
    case.teal: return Color(red: 0.133, green: 0.561, blue: 0.620)
    case.yellow: return Color(red: 1.000, green: 0.875, blue: 0.302)
    }
    }

    en copiant les valeurs RVB des thèmes à partir des fichiers de ressources.json. Cela a résolu le problème et maintenant les couleurs apparaissent comme prévu.

    Ce que je ne comprends pas, c'est pourquoi SwiftUI n'a pas pu traiter Color(rawValue)l'exemple de données utilisé dans CardView(), qui était DailyScrum(title: "Design", attendees: ["Cathy", "Daisy", "Simon", "Jonathan"], lengthInMinutes: 10, theme:.yellow). Bien sûr, .periwinklecela n'a peut-être pas été défini auparavant, mais .yellowc'est certainement le cas. En fait, si je réécris mainColorde Color(rawValue)à Color(.yellow), j'obtiens toutes les cartes colorées en jaune sans avoir à passer de valeur RVB.

    Alors, qu'est-ce qui Color(rawValue)ressort de l'énumération qu'il est incapable de traiter .yellowlorsqu'il est passé à partir de rawValue?

    Commentaires

    Posts les plus consultés de ce blog

    Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

    Détecter les appuis sur les touches fléchées en JavaScript

    Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"