The best way to explore upcoming and existing Swift language features:
The Swift Evolution Explorer
https://t.co/oOOGTjNo9R
https://t.co/OJQ7hTozGF
#swiftlang#iosdev
1,900+ visuals and counting 🥳
LACWE now includes over 1,900 visuals, created exclusively for members. I’m excited to keep creating and adding even more lessons for you 🚀
→ https://t.co/2EYlDNdQjq
Trabajadores de Google han presentado MESOP!
Un framework de código abierto para crear UI Web con PYTHON y componentes de ANGULAR.
Vamos a probarlo por primera vez en directo.
A las 20:00h (España) desde Twitch. Te dejo toda la info a continuación ↓
Si estabas buscando un curso para aprender Python desde cero y en Español, la UC (Universidad de Chile) tiene uno totalmente gratis.
→ 17 horas
→ 6 módulos
→ Con vídeos y ejercicios
→ A tu ritmo
→ Sin experiencia previa
→ Certificado opcional
https://t.co/oPiYPmMkKT
IA para Bases de Datos!
Vanna AI es una inteligencia artificial creada con Python para SQL que se entrena sobre tu esquema de base de datos.
Le preguntas lo que quieras con lenguaje natural y te genera la Query y muestra el resultado de la consulta.
🔗 https://t.co/sw2hXdUKE8
I recently finished updating all `ObservableObject` classes to @Observable. Here's a couple of noteworthy points I discovered along the way that might be useful.
1. Lazy properties
You'll get the error: 'lazy' cannot be used on a computed property.
The solution, if appropriate, is to mark each lazy property with @ObservationIgnored.
I say if appropriate because you might need those properties to have observation functionality, so be careful here. In my case I used lazy on properties that don’t change after initialization so no issues.
2. @Published properties
Since the @Published property wrapper is not required in @Observable classes, you might have to update code that accessed Combine pipelines. In my case I was only using .sink() blocks to run closures when values changed, so the solution was pretty simple, i.e., use didSet on the properties instead.
3. @AppStorage properties
You’ll get the error: Property wrapper cannot be applied to a computed property.
The solution is to declare the value as a computed property instead.
So, instead of something like this in your model:
@AppStorage(wrappedValue: defaultValue, "key")
var someValue: Bool
Use an explicit computed property instead:
var someValue: Bool {
get {
access(keyPath: \.someValue)
return UserDefaults.someValue
}
set {
withMutation(keyPath: \.someValue) {
UserDefaults.someValue = newValue
}
}
4. @Bindable property wrapper
If you pass your @Observable class to the environment, i.e., View().environment(viewModel), then you’ll encounter errors like Cannot find '$viewModel' in scope.
Here, you need to use the @Bindable property wrapper. You can either make a local bindable property inside the view body like this:
var body: some View {
@Bindable var viewModel = viewModel
…
}
Alternatively you can pass your view model to Bindable.init() like this, for example:
.alert(“alert_title”, isPresented: Bindable(viewModel).isAlertPresented) {
…
}
¿Eres programador o diseñador web?
¡Esta colección de herramientas te interesa!
Generador de fondos, animaciones 3D, SVGs y más:
→ https://t.co/9LpUCR7eK4
Curso para aprender a integrar 3 IAs en una App Android.
→ Whisper: Para transformar audio a texto
→ ChatGPT: Para modificar texto
→ DALL·E 2: Para generar imágenes
Vídeo de 4 horas y media, gratis, en español y con el código publicado:
▶️ https://t.co/qp9ndmZvLH
No hay excusa para no usar iconos profesionales en tus proyectos...
Aquí tienes +180.000 gratis!
✅ Son Open Source
⬇️ Elige 6 formatos de descarga (SVG, PNG, React, WebP...)
🛠️ Puedes personalizar color y aspecto