matt
matt

Reputation: 787

Objects in Swift: Value of 'Object' has no member

Here's my doozy.

I've got this lovely little function in a file called functions.swift

//functions.swift

     func latestActiveGoal() -> Object {
            let realm = try! Realm()
            let currentGoal = realm.objects(Goal).filter("Active == 1").sorted("CreatedOn").last
            return currentGoal!
        }

which returns a Goal object. (A Goal might be wanting to lose weight, or stop being so inept at Swift).

In a different view controller, I want to access this object. Here's what I'm trying:

//viewController.swift

@IBOutlet weak var aimText: UILabel!

let funky = functions()

    func getGoals(){

            var currentGoal = funky.latestActiveGoal()
            print(currentGoal)

            aimText.text = currentGoal.Title
    }

The print(CurrentGoal) output shows this:

Goal {
    id = 276;
    Title = Goal Title;
    Aim = Aim;
    Action = Nothing;
    Active = 1;
    CreatedOn = 2016-02-12 00:14:45 +0000;
}

aimText.text = currentGoal.Title and aimText = currentGoal.Title both throw the error:

Value of 'Object' has no member 'Title'

By printing the contents of the object, I can see the data, but can't figure out how. Any help greatly appreciated.

Upvotes: 1

Views: 928

Answers (2)

Hitendra Solanki
Hitendra Solanki

Reputation: 4941

Just replace your functions with below code. It will works perfect.

This fuction will check if goal available, then only it will return.

func latestActiveGoal() -> Object? {
            let realm = try! Realm()
            let currentGoals = realm.objects(Goal).filter("Active == 1").sorted("CreatedOn")
            if currentGoals.count > 0 {
                 return currentGoals.last;
            }
            return nil;
        }

Your getGoals method will be as follow.

func getGoals(){    
    if let currentGoalObject = funky.latestActiveGoal() {
        print(currentGoalObject)
        let goal = currentGoalObject as! Goal
        print(goal.Title)
        aimText.text = goal.Title
    }
}

Upvotes: 2

Bryan Chen
Bryan Chen

Reputation: 46598

As the error message said, currentGoal is a value of Object type which doesn't have member Title.

This is because function latestActiveGoal returns Object instead of Goal. You just need to make it return Goal by change the return type:

func latestActiveGoal() -> Goal {

Upvotes: 3

Related Questions