0

I have the exact same issue as stated here: Wordpress REST API + Swift

But the accepted answer is not working for me.

My code to retrieve the Wordpress Posts API:

import SwiftUI

struct Rendered: Codable {
     var rendered: String
}

struct Post: Codable, Identifiable {
    var id: Int
    var title: Rendered
}

class Api {
    func getPosts(completion: @escaping ([Post]) -> ()) {
        
        guard let url = URL(string: "https://9fc9d65.ngrok.io/wp-json/wp/v2/posts") else { return }

        URLSession.shared.dataTask(with: url) { (data, _, _) in

            let posts = try! JSONDecoder().decode([Post].self, from: data!)

            DispatchQueue.main.async {
                completion(posts)
            }
        }
        .resume() //resume session call
    }
}

Example JSON response:

[
    {
        "id": 7,
        "title": {
            "rendered": "Example Title"
        }
    }
]

And where I'm rendering the API results as a List:

import SwiftUI

struct PostList: View {
    
    @State var posts: [Post] = []
    
    var body: some View {
        List(posts) { post in
            Text(post.title)
        }
        .onAppear {
            Api().getPosts { (posts) in
                self.posts = posts
            }
        }
    }
}

struct PostList_Previews: PreviewProvider {
    static var previews: some View {
        PostList()
    }
}

This line within List() is where I'm trying to access the decoded title is where I'm receiving the error:

Text(post.title)

Error I'm getting:

Initializer 'init(_:)' requires that 'Rendered' conform to 'StringProtocol'

1 Answer 1

1

Your model is defined like this:

struct Rendered: Codable {
     var rendered: String
}

struct Post: Codable, Identifiable {
    var id: Int
    var title: Rendered
}

Which means that title is of the type Rendered which is not a String itself, but rather a struct with a sub protocol called rendered.

So, my suspicion is that you just need to change your line:

Text(post.title)

to:

Text(post.title.rendered)

(This is making an assumption that you aren't seeing errors in the JSON decoding process)

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.