2014-10-17 89 views
2

在我的添加功能中,answerLabel.text它给我一个错误。它说“字符串”是无法转换为“廉政”,我试图让我从secondStep2了,放在我的函数的参数'String'在Swift中不能转换为'Int'

//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) 

我的功能

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)"); 

     } 
    } 

我的问题我该如何获得接受我的变量的函数?

+0

'var second Step2 =“\(firstStep2 * 10 * 10)”是一个字符串。你可能想要:'var secondStep2 = firstStep2 * 10 * 10' – 2014-10-17 04:46:59

+1

另外:'answerLabel.text = printSimplifiedFraction(Numerator:secondStep2)'是没有意义的,除非你的'printSimplified ...'方法实际返回一个String。 – 2014-10-17 04:48:30

回答

2

我相信这是你想要的,首先在你的一dding功能应该是:

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

然后打印...方法应该改变这样的(注意,它返回一个字符串):

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)") 
    } 
} 

此外,翻翻你的代码我认为你可以相当简化逻辑(我也转换为整数,因为你说你想在评论中):

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) 
+0

我该如何改变这个** let firstDenomInTextField:Double! =(firstDenominatorTextField.text作为NSString).doubleValue **是一个Int而不是一个Double – alex 2014-10-17 05:33:06

+0

对不起,你是否只希望_particular_常数是一个Int? – 2014-10-17 05:38:14

+0

是的,一切正常,我只需要这些常量是一个Int。该错误表示,它不是一个Int时它需要。我尝试.toInt(),但没有工作有什么想法? – alex 2014-10-17 05:40:37

0

试试这个:

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

和返回值添加到您的功能

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 
} 
+0

不,不幸的是它说:可选类型'@lvalue Int?'不能用作布尔值;测试'!= nil'而不是 – alex 2014-10-17 04:16:57

+0

你有一个想法,它是给这个错误? – alex 2014-10-17 04:25:54

0
  • printSimplifiedFraction没有返回任何值,但你分配给answerLabel。文字,我认为这是问题所在。
  • 如果您想分配一个从函数返回的值,请将函数的返回类型添加到函数中并返回一个值。

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

  • 检查this link

在你的代码做这样

 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 
} 
+0

修改答案检查一次。 – 2014-10-17 04:38:02

+0

什么是** yourValue **是第二个步骤? – alex 2014-10-17 04:41:21

+0

你想在answerLabel.text中打印什么? – 2014-10-17 04:43:44