'Why Instance member 'getPerson' cannot be used on type 'GetPerson'

I write code in a Cocoa framework and call the function in it from main project. But it fails always returning a message. I fix this in two ways.

First, in main project viewController:

import getPerson

override func viewDidLoad() {
    super.viewDidLoad()
        var person = GetPersons.getPerson(name: "Jack")
}

Returns:

Instance member 'getPerson' cannot be used on type 'GetPerson'; did you mean to use a value of this type instead

Second:

import getPerson

override func viewDidLoad() {
    super.viewDidLoad()
        let vc = GetPersons.self
        var person = vc.getPerson(name: "Jack")
}

Returns:

Instance member 'getPerson' cannot be used on type 'GetPersons'

What's happening with this? How do I fix it?

In test framework :

import Fundation 

public class GetPersons {

    public struct Person {

        public var name : String = ""
        public var age : Int = 0

    }

    public func getPerson(name : String) -> Person {
         var person = Person()
         return person
    }
}


Solution 1:[1]

In your first example, it's telling you that you defined getPerson(name: String) as an instance method. (Presumably because it operates on instance properties.)

You are calling it here as if it were defined as:

static func getPerson(name: String) { ...

The second is saying much the same thing, without guessing what you want to do.

If I understand what you want to do, I think it goes something like this:

class GetPersons {

    struct Person {

        public var name : String = ""
        public var age : Int = 0

    }

    func getPerson(name : String) -> Person {
         var person = Person()
         return person
    }
}

Then, in your view controller define a property for the instance of GetPersons:

let gp = GetPersons()

then in viewDidLoad:

let person = gp.getPerson(name: "Jack")

Also, is GetPersons in an actual framework, or is it simply a class defined (as it should be) in a separate file?

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1