import SwiftUI struct AvatarView: View { let url: URL? let nick: String? var size: CGFloat = 40 var body: some View { Group { if let url { AsyncImage(url: url) { phase in switch phase { case .success(let image): image.resizable().scaledToFill() default: placeholder } } } else { placeholder } } .frame(width: size, height: size) .clipShape(Circle()) } private var placeholder: some View { Circle() .fill(Color.accentColor.opacity(0.15)) .overlay( Text(initial) .font(.system(size: size * 0.4, weight: .semibold)) .foregroundStyle(Color.accentColor) ) } private var initial: String { nick?.prefix(1).uppercased() ?? "?" } }