De temps en temps, je tombe sur un SDK qui n'utilise pas SwiftUI, mais «l'ancien» UIKit avec son UIViewet / ou UIViewController.
Alors que je suis en train d'écrire une série sur la programmation de drones DJI , j'utilise des SDK DJI basés sur UIKit. Par conséquent, j'ai dû trouver un moyen de les utiliser dans mon application basée sur SwiftUI.
Cet article explique comment utiliser UIViewet UIViewControlleravec les applications SwiftUI et fournit des plans prêts à être copiés et collés.
N'hésitez pas à m'acheter un café au cas où vous aimeriez cet article.
Dans le cas où une UIViewclasse basée sur-est nécessaire dans SwiftUI, alors c'est aussi simple que de créer une structure qui sera la vue SwiftUI qui implémente le UIViewRepresentable-protocol.
Cela se fait en fournissant deux méthodes:
makeUIView() etupdateUIView()Fondamentalement, trois étapes doivent être prises pour adapter ce plan:
MyViewpar le nom de votre vue.SomeUIKitViewpar le type du UIViewqui doit être utilisé.struct MyView: UIViewRepresentable {
typealias UIViewType = SomeUIKitView
func makeUIView(context: Context) -> UIViewType {
let myView = UIViewType()
// myView.delegate = context.coordinator
return myView
}
func updateUIView(_ uiView: UIViewType, context: Context) {
// left blank
}
func makeCoordinator() -> MyView.Coordinator {
return Coordinator(self)
}
}
extension MyView {
class Coordinator /*: SomeUIKitViewDelegate */ {
var parent: MyView
init(_ parent: MyView) {
self.parent = parent
}
// Implement delegate methods here
}
}
makeUIViewController etupdateViewControllerMyViewpar le nom de votre vue.SomeUIKitViewControllerpar le type du UIViewControllerqui doit être utilisé.struct MyView: UIViewControllerRepresentable {
typealias UIViewControllerType = SomeUIKitViewController
func makeUIViewController(context: Context) -> UIViewControllerType Controller {
let myViewController = UIViewControllerType()
// myView.delegate = context.coordinator
return myViewController
}
func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {
// left blank
}
func makeCoordinator() -> MyView.Coordinator {
return Coordinator(self)
}
}
extension MyView {
class Coordinator /*: SomeUIKitViewDelegate */ {
var parent: MyView
init(_ parent: MyView) {
self.parent = parent
}
// Implement delegate methods here
}
}
Sauvegarder votre base de code : traiter les valeurs d'énumération imprévues Avez-vous déjà été confronté à une situation où votre application a commencé à planter de nulle part, ce qui, après enquête, a révélé que le backend a fourni une valeur pour certains champs basés sur l'énumération qui n'existent pas dans l'énumération dans le code ? Prenons l'exemple suivant : Ohhh, j'aime du thé. Mais que se passe-t-il si nous modifions favouriteBeverage dans les données JSON de Tea à Juice (une valeur qui n'existe pas dans l'énumération, Beverage) ? Concentrez-vous sur la partie du message : "Impossible d'initialiser Beverage à partir d'une valeur de chaîne non valide Juice" S'il s'agissait d'une application réelle au lieu d'un code de terrain de jeu, l'application aurait planté. Alors, comment prenons-nous soin du fait que même si le backend envoie une valeur invalide dans la réponse, notre application devrait être capable de la gérer au lieu de planter carrément ? L'un des moyens, et mon préféré:
Depuis que j'ai écrit un article sur la mise en œuvre d'un validateur pour le formulaire de connexion dans RxSwift, j'ai décidé d'en écrire un pour la même idée en utilisant le framework Apple Combine. Presque toutes les applications mobiles nécessitent un formulaire de connexion et vous devez valider les informations d'identification de l'utilisateur avant de poursuivre le processus de connexion.
Par Alyson Lee, conseillère en gestion des affaires gouvernementales Le processus annuel d'affectation des crédits du gouvernement fédéral est au cœur de nos efforts pour financer l'élimination du dioxyde de carbone (CDR). Chaque année, Carbon180 soumet des demandes à divers bureaux du Congrès pour aider à orienter les flux de dollars de l'année prochaine.
Ce qui est vieux est à nouveau nouveau et ce qui était autrefois la chose brillante et scintillante semble maintenant terne. Je ne parle pas du retour des jeans JNCO parmi les enfants cool du centre-ville avec d'autres modes de la fin des années 1990.
Combien de fois avez-vous jeté une bouteille en plastique, un bocal en verre, une canette en aluminium ou un paquet d'énergie verte sans réfléchir à deux fois ? Combien de fois avez-vous souhaité pouvoir obtenir quelque chose en échange de leur recyclage ? Si vous êtes comme la plupart des gens, la réponse est probablement plusieurs fois. Le recyclage est souvent perçu comme un tracas, une corvée ou un devoir qui n'apporte aucun bénéfice immédiat ou tangible.
Dans le monde hyper-connecté d'aujourd'hui, les systèmes médiatiques jouent un rôle central dans la formation de l'opinion publique et, par conséquent, dans la prise de décision démocratique. Dans son analyse approfondie de l'économie politique de la communication, le chercheur Robert McChesney remet en question la sagesse conventionnelle et présente ce qu'il appelle les « cinq vérités » sur les médias.