Frostmourne
Frostmourne

Reputation: 174

Is there a way to customise declarations for variable naming in swift?

I'm trying to initialise a value in dictionary as follow,

var og:image: String

But after og: it tries to assign the type considering og as the variable to site_name, which is obviously wrong.

Is there a way to assign og:image as variable to String type using special or escape characters?

In reference to this, apple does not provide any meaningful explanations to variable naming conventions in such a situation.

Edit-1:

Here is code snippet to clarify dictionary usage is in JSON parsing data structure,

struct Metadata: Decodable{
    var metatags : [enclosedTags]
}
struct enclosedTags: Decodable{
    var image: String
    var title: String
    var description: String
    var og:site_name: String
}

Upvotes: 0

Views: 320

Answers (3)

Frostmourne
Frostmourne

Reputation: 174

Turns out swift has it's own feature in terms of naming specificity of variables in structs i.e. CodingKeys, so in terms for me the below naming convention worked,

   struct Metadata: Decodable{
        var metatags: [enclosedTags]

    }
        struct enclosedTags: Decodable{
            let image: String
            let title: String
            let description: String
            let siteName: String

            private enum CodingKeys : String, CodingKey{
                case image = "og:image", title = "og:title", description = "og:description", siteName = "og:site_name"
            }

This was rightfully pointed out by @hamish in comments (Thanks mate!)

Upvotes: 0

nikano
nikano

Reputation: 1248

Swift allow you to use almost any character when naming variables. You can even use Unicode characters.

However, there are a few restrictions:

Constant and variable names can’t contain whitespace characters, mathematical symbols, arrows, private-use (or invalid) Unicode code points, or line- and box-drawing characters. Nor can they begin with a number, although numbers may be included elsewhere within the name.

Said that, it is not possible to use : in the name of a variable. However, you can use a Unicode character similar to that symbol. Depending on what you want it for, this may be a valid solution.

Here you have a list of the Unicode characters similar to : that can be used in the name of a variable:

(https://www.compart.com/en/unicode/based/U+003A)

Based on the example you provided it would be this:

struct Metadata: Decodable{
    var metatags : [enclosedTags]
}
struct enclosedTags: Decodable{
    var image: String
    var title: String
    var description: String
    var og:site_name: String
}

Upvotes: 0

a.u.b
a.u.b

Reputation: 1609

You cannot use : (colon). But if you really want:

var ogCOLONimage: String

Joking apart. You could use a Dictionary or something like that:

var images: [String: String] = ["og:image" : "your string"]

Now you can access your og:image data with images["og:image"].

Upvotes: 1

Related Questions