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:
Merci beaucoup.
Solution du problème
Suite à la suggestion de @loremipsum, j'ai remplacé la mainColor
proprié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, .periwinkle
cela n'a peut-être pas été défini auparavant, mais .yellow
c'est certainement le cas. En fait, si je réécris mainColor
de 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 .yellow
lorsqu'il est passé à partir de rawValue
?
Commentaires
Enregistrer un commentaire