alex
alex

Reputation: 1774

'String' is not convertible to 'Int' in Swift

In my adding function where answerLabel.text is it is giving me an error. It says 'String' is not convertible to 'Int' and I'm trying to get what I got from the secondStep2 and put in the parameters of my functions

//Adding Function
        changingSignsLabel.text = "+"
        let firstDenomInTextField:Double! = (firstDenominatorTextField.text as NSString).doubleValue
        let firstNumInTextField:Double! = (firstNumeratorTextField.text as NSString).doubleValue
        let firstWholeInTextField:Double! = (firstWholeNumberTextField.text as NSString).doubleValue

        let secondDenomInTextField:Double! = (secondDenominatorTextField.text as NSString).doubleValue
        let secondNumInTextField:Double! = (secondNumeratorTextField.text as NSString).doubleValue
        let secondWholeInTextField:Double! = (secondWholeNumberTextField.text as NSString).doubleValue

        var firstStep = firstDenomInTextField! * firstWholeInTextField! / firstDenomInTextField!

        var secondStep = firstStep + firstNumInTextField! / firstDenomInTextField!

        var thirdStep = secondDenomInTextField! * secondWholeInTextField! / secondDenomInTextField!
        var fourthStep = thirdStep + secondNumInTextField! / secondDenomInTextField!

        var calculatedAnswer = (secondStep + fourthStep)

        answerLabel.hidden = false

        var firstStep2 = calculatedAnswer / 1
        var secondStep2 = "\(firstStep2 * 10 * 10)"


        answerLabel.text = printSimplifiedFraction(Numerator: secondStep2)

My Function

func printSimplifiedFraction(Numerator numerator: Int, Denominator denominator: Int = 100)
    {
        var finalNumerator = numerator;
        var finalDenominator = denominator;

        var wholeNumbers:Int = numerator / denominator;
        var remainder:Int = numerator % denominator;

        //println("wholeNumbers = \(wholeNumbers), remainder = \(remainder)");
        //println("\(denominator) % \(remainder) = \(denominator % remainder)");

        if(remainder > 0)
        {
            // see if we can simply the fraction part as well
            if(denominator % remainder == 0) // no remainder means remainder can be simplified further
            {
                finalDenominator = denominator / remainder;
                finalNumerator = remainder / remainder;
            }
            else
            {
                finalNumerator = remainder;
                finalDenominator = denominator;
            }
        }

        if(wholeNumbers > 0 && remainder > 0)
        {
            // prints out whole number and fraction parts
            println("Simplified fraction of \(numerator)/\(denominator) = \(wholeNumbers) \(finalNumerator)/\(finalDenominator)");
        }
        else if (wholeNumbers > 0 && remainder == 0)
        {
            // prints out whole number only
            println("Simplified fraction of \(numerator)/\(denominator) = \(wholeNumbers)");
        }
        else
        {
            // prints out fraction part only
            println("Simplified fraction of \(numerator)/\(denominator) = \(finalNumerator)/\(finalDenominator)");

        }
    }

My Question how do I get the function to accept my variable?

Upvotes: 2

Views: 1752

Answers (3)

T. Benjamin Larsen
T. Benjamin Larsen

Reputation: 6383

I believe this is what you want, first in your adding function it should be:

var firstStep2 = calculatedAnswer / 1
var secondStep2 = Int(firstStep2 * 10 * 10)
answerLabel.text = printSimplifiedFraction(Numerator: secondStep2)

Then your print... method should be changed like this (note that it's returning a String):

func printSimplifiedFraction(Numerator numerator: Int, Denominator denominator: Int = 100) -> String
{
    // I haven't looked into this bit
    ...

    if(wholeNumbers > 0 && remainder > 0)
    {
        return ("Simplified fraction of \(numerator)/\(denominator) = \(wholeNumbers) \(finalNumerator)/\(finalDenominator)")
    }
    else if (wholeNumbers > 0 && remainder == 0)
    {
        return ("Simplified fraction of \(numerator)/\(denominator) = \(wholeNumbers)")
    }
    else
    {
        return ("Simplified fraction of \(numerator)/\(denominator) = \(finalNumerator)/\(finalDenominator)")
    }
}

Also, looking through your code I think you can simplify the logic quite a bit (I've also converted to Integers as you said you wanted in the comments):

let firstDenomInTextField = firstDenominatorTextField.text.toInt()
let firstNumInTextField = firstNumeratorTextField.text.toInt()
let firstWholeInTextField = firstWholeNumberTextField.text.toInt()

let secondDenomInTextField = secondDenominatorTextField.text.toInt()
let secondNumInTextField = secondNumeratorTextField.text.toInt()
let secondWholeInTextField = secondWholeNumberTextField.text.toInt()

var firstStep = firstWholeInTextField! + firstNumInTextField! / firstDenomInTextField!
var secondStep = secondWholeInTextField! + secondNumInTextField! / secondDenomInTextField!
var calculatedAnswer = (firstStep + secondStep)
var numerator = Int(calculatedAnswer * 10 * 10)
answerLabel.text = printSimplifiedFraction(Numerator: numerator)

Upvotes: 2

Anjaneyulu Battula
Anjaneyulu Battula

Reputation: 1960

  • this printSimplifiedFraction is not returning any value, but you are assigning to the answerLabel.text, i think this is the problem.
  • If you want to assign a value which is returned form fuction, add return type to the fuction and return a value.

    func printSimplifiedFraction(Numerator numerator: Int, Denominator denominator: Int = 100) -> String { //add end of your function return yourValue; }

  • Check this link

In Your Code do like this

     var secondStep2 = (firstStep2 * 10 * 10)
     answerLabel.text = printSimplifiedFraction(Numerator: secondStep2)

    func printSimplifiedFraction(Numerator numerator: Int, Denominator denominator: Int = 100) -> String
{
    var finalNumerator = numerator;
    var finalDenominator = denominator;

    var wholeNumbers:Int = numerator / denominator;
    var remainder:Int = numerator % denominator;

    //println("wholeNumbers = \(wholeNumbers), remainder = \(remainder)");
    //println("\(denominator) % \(remainder) = \(denominator % remainder)");

    if(remainder > 0)
    {
        // see if we can simply the fraction part as well
        if(denominator % remainder == 0) // no remainder means remainder can be simplified further
        {
            finalDenominator = denominator / remainder;
            finalNumerator = remainder / remainder;
        }
        else
        {
            finalNumerator = remainder;
            finalDenominator = denominator;
        }
    }


    var returnValue :String


    if(wholeNumbers > 0 && remainder > 0)
    {
        returnValue = "Simplified fraction of \(numerator)/\(denominator) = \(wholeNumbers) \(finalNumerator)/\(finalDenominator)"
    }
    else if (wholeNumbers > 0 && remainder == 0)
    {
        returnValue = "Simplified fraction of \(numerator)/\(denominator) = \(wholeNumbers)"
    }
    else
    {
        returnValue = "Simplified fraction of \(numerator)/\(denominator) = \(finalNumerator)/\(finalDenominator)"

    }

    return returnValue
}

Upvotes: 0

gabbler
gabbler

Reputation: 13766

Try this:

var str:String = "abc"
var a:Int? = str.toInt()
if (a != nil) {
   printSimplifiedFraction(Numerator: str!)
}

And add a return value to your function

func printSimplifiedFraction(Numerator numerator: Int, Denominator denominator: Int = 100) ->String {

    var finalNumerator = numerator;
    var finalDenominator = denominator;

    var wholeNumbers:Int = numerator / denominator;
    var remainder:Int = numerator % denominator;

    if(remainder > 0)
    {
        // see if we can simply the fraction part as well
        if(denominator % remainder == 0) // no remainder means remainder can be simplified further
        {
            finalDenominator = denominator / remainder;
            finalNumerator = remainder / remainder;
        }
        else
        {
            finalNumerator = remainder;
            finalDenominator = denominator;
        }
    }

    var result:String = "Simplified fraction of \(numerator)/\(denominator) = ";

    if(wholeNumbers > 0 && remainder > 0)
    {
        // prints out whole number and fraction parts
        result += "\(wholeNumbers) \(finalNumerator)/\(finalDenominator)"
    }
    else if (wholeNumbers > 0 && remainder == 0)
    {
        // prints out whole number only
        result += "\(wholeNumbers)"
    }
    else
    {
        // prints out fraction part only
        result += "\(finalNumerator)/\(finalDenominator)"

    }
    println("\(result)")
    return result
}

Upvotes: 0

Related Questions