Type Mismatch Object and Integer

115 views Asked by At
m.CurrDateObject = FindCurrDateObject(m.itemContent.date)
?"title :"m.CurrDateObject.title //Here I got Type Mismatch Error When 0 comes
?"text :"m.CurrDateobject.text

'FindCurrDateObject Return Object when if condition true in function 'when if condition false then it's return 0 'Here, I received two different data types on the function

  1. If Condition true => Object
  2. If Condition false => 0 as Integer

Can anyone suggest How can I manage this two data types on Roku?

function FindCurrDateObject(date as Integer) as Object
    m.date = CreateObject("roDateTime")
    m.myObject = {}
    for each item in m.global.itemArray
        now = m.date.AsSeconds()
                if (now >= date) then
                            m.myObject.title = item.title
                            m.myObject.text = item.text
                            return m.myObject 
                 //This below-mentioned part works, but it's called every time. I don't want to return the invalid value
                 'else 
                 'return invalid                      
             end if
    end for
end function
3

There are 3 answers

0
swaran On

The function FindCurrDateObject can be improved like this-

function FindCurrDateObject(date as Integer) as Object
    date = CreateObject("roDateTime")
    myObject = {}
    now = m.date.AsSeconds()
    for each item in m.global.itemArray
        if (now >= date)
            myObject.title = item.title
            myObject.text = item.text
            exit for
        end if 
    end for
    return myObject
end function
1
hornyhedgehog On
function FindCurrDateObject(dateAsSeconds as Integer) as Object
    dateTimeObj = CreateObject("roDateTime")
    timeNowAsSeconds = dateTimeObj.AsSeconds()
    m.myObject = {}
    for each item in m.global.itemArray
        if (timeNowAsSeconds >= dateAsSeconds) then
            m.myObject.title = item.title
            m.myObject.text = item.text
            return m.myObject 
        else 
            return Box(0) // This will return roInteger object                     
        end if
    end for
end function
0
vbuchii On

Here's how you can modify your code:

m.CurrDateObject = FindCurrDateObject(m.itemContent.date)

if (m.CurrDateObject <> 0)
    ? "title: " m.CurrDateObject.title
    ? "text: " m.CurrDateObject.text
else 
    ? "No valid date object found"
end if

In this code, we first check if m.CurrDateObject is not 0. If it's not 0, we know it's an object and we can safely access its properties. If it is 0, we print a message indicating that no valid date object was found.

Also, in your FindCurrDateObject function, you should return 0 if no matching date is found:

function FindCurrDateObject(date as Integer) as Object
    date = CreateObject("roDateTime")
    myObject = {}

    for each item in m.global.itemArray
        now = date.AsSeconds()
        if (now >= date) then
            myObject.title = item.title
            myObject.text = item.text
            return myObject
        end if
    end for

    return 0 ' Return 0 if no matching date is found

end function

This way, the function always returns a value, either an object or 0, and you can handle each case appropriately in your main code.