2014-10-17 63 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

相關問題