Home > front end >  SwiftUI: func .insert Error. Is it just that the func code syntax for the .insert is incorrect or sh
SwiftUI: func .insert Error. Is it just that the func code syntax for the .insert is incorrect or sh

Time:02-05

I have a func .insert error.

Is it just that the func code syntax for the .insert is incorrect or should I consider another approach all together?

import SwiftUI

struct SocialMediaSite: Identifiable {
    let id = UUID()
    var name: String
    var isBlocked = false
}

struct BlockedSocialMediaSites: View {
    @State private var newSocialMediaSite = ""

    @State private var socialMediaSites: [SocialMediaSite] = [
        SocialMediaSite(name: "FaceBook/Meta"),
        SocialMediaSite(name: "FB Messenger"),
        SocialMediaSite(name: "TicTok"),
        SocialMediaSite(name: "Instagram"),
        SocialMediaSite(name: "Twitter"),
        SocialMediaSite(name: "SnapChat"),
        SocialMediaSite(name: "WhatApp"),
        SocialMediaSite(name: "WeChat"),
        SocialMediaSite(name: "OkCupid"),
        SocialMediaSite(name: "Reddit"),
        SocialMediaSite(name: "Pintrest"),
        SocialMediaSite(name: "MySpace"),
        SocialMediaSite(name: "ClassMates"),
    ]
    var body: some View {
        NavigationView {
            // ***** Header for page

            VStack {
                // Code for Page Header removed

                // ***** Toggle List of the "popular" social media sites

                List($socialMediaSites) { $SocialMediaSite in

                    HStack {
                        Toggle("", isOn: $SocialMediaSite.isBlocked)
                        if SocialMediaSite.isBlocked {
                            Text("BLOCKED")
                                .foregroundColor(.red)
                                .frame(width: 85, height: 20, alignment: .trailing)
                        }

                        Text(SocialMediaSite.name)
                            .frame(width: 120, height: 20, alignment: .leading)
                    }
                    .listRowBackground(Color(red: 240/255, green: 240/255, blue: 240/255))
                    .frame(width: 150, height: 20, alignment: .leading)
                }

                // **** textField for user input of new social media sites

                ScrollView {
                    TextField("Add Social Media Site", text: $newSocialMediaSite)
                        .keyboardType(.emailAddress)
                        .submitLabel(.done)
                        .font(.custom("Helvetica", size: 16.0))
                        .textFieldStyle(RoundedBorderTextFieldStyle())
                        .foregroundColor(.blue)
                        .frame(width: 300, height: 30, alignment: .center)
                        .border(Color.gray, width: 2.0)
                        .padding(.leading, 5)
                }
                .frame(width: 400, height: 50, alignment: .center)
                .padding(.top, 20)
                .background(Color(red: 166/255, green: 170/255, blue: 180/255)
                    .brightness(0.09)
                    .opacity(0.69)
                )

            }.padding(.vertical, 20)
                .onSubmit(addNewSocialMediaSite)
        }
    }

    // ***** Inserts user input of textField into Array

    func addNewSocialMediaSite() {
        let userInputTextField = newSocialMediaSite
        guard userInputTextField.count > 0 else { return }
        // need more validation
        withAnimation {
            socialMediaSites.insert(userInputTextField, at: 0)
        }
        newSocialMediaSite = ""
    }
}

// *****  Preview

struct BlockedSocialMediaSites_Previews: PreviewProvider {
    static var previews: some View {
        BlockedSocialMediaSites()
    }
}

CodePudding user response:

Your socialMediaSites is an array of SocialMediaSites, not strings. You'll need to create a new SocialMediaSite first.

func addNewSocialMediaSite() {
    
    /// `newSocialMediaSite` is a string
    guard newSocialMediaSite.count > 0 else { return }
    withAnimation {
        
        /// create a new `SocialMediaSite`
        let newSite = SocialMediaSite(name: newSocialMediaSite)
        socialMediaSites.insert(newSite, at: 0)
    }
    
    newSocialMediaSite = ""
}
  •  Tags:  
  • Related