2016-12-16 52 views
0

我試圖在Swift 3中輸出文本字段中的結果,但是當按下按鈕時沒有任何反應,甚至不能在控制檯中打印。它應該在我猜想的最後3行代碼中。我無法弄清楚我做錯了什麼,所以你的幫助非常感謝!我也是Swift的新手,所以對你來說可能是顯而易見的,但對我來說卻是死衚衕。如何在Swift 3中輸出UITextView的結果?

這是我的代碼:

@IBAction func encrypt(sender: AnyObject?) { 

    let text = encryptText.text 
    let key = pkey.text 

    func encrypt(text: String) -> (text: String, key: [Int]) { 
     let text = text.lowercased() 
     let key = self.key(count: text.characters.count) 
     let map = self.map() 
     var output = String() 

     for (index, character) in text.characters.enumerated() { 
      if character == " " { 
       output.append(character) 
      } 

      else { 
       if let letterIndex = map.forward[String(character)] { 
        let keyIndex = key[index] 
        let outputIndex = (letterIndex + keyIndex + map.lastCharacterIndex) % map.lastCharacterIndex 
        if let outputCharacter = map.reversed[outputIndex] { 
         output.append(outputCharacter) 
        } 
       } 
      } 
     } 
     print(text) 
     outputText.text = output 
     return (text: output.uppercased(), key: key) 
    } 


} 
+0

你不調用'encrypt()' – shallowThought

+0

我沒有在你的代碼中看到任何UITextView。你的意思是在你的UITextView中顯示結果嗎?你需要做myUITextView.text =「一些文本」,其中myUITextView是你的UITextView對象。 – Alic

+0

這是文本視圖'outputText.text = output' – pipp5

回答

1

你必須嵌套在另一個函數的函數(encrypt)(該@IBAction也稱爲encrypt),但你永遠不會調用嵌套函數。嘗試是這樣的:

@IBAction func encrypt(sender: AnyObject?) { 

    func encrypt(text: String) -> (text: String, key: [Int]) { 
     let text = text.lowercased() 
     let key = self.key(count: text.characters.count) 
     let map = self.map() 
     var output = String() 

     for (index, character) in text.characters.enumerated() { 
      if character == " " { 
       output.append(character) 
      } 

      else { 
       if let letterIndex = map.forward[String(character)] { 
        let keyIndex = key[index] 
        let outputIndex = (letterIndex + keyIndex + map.lastCharacterIndex) % map.lastCharacterIndex 
        if let outputCharacter = map.reversed[outputIndex] { 
         output.append(outputCharacter) 
        } 
       } 
      } 
     } 
     return (text: output.uppercased(), key: key) 
    } 

    let text = encryptText.text 
    let key = pkey.text 

    // call the encrypt function 
    let (resultText, resultKey) = encrypt(text: text) 

    // put the result in the text view 
    outputText.text = resultText 

} 

這也是一個有點難以確定你在做什麼,因爲你聲明具有相同名稱(文字,鑰匙,加密等),這麼多的變數。選擇這些名稱的細微變化可以提高代碼的可讀性。

+1

非常感謝Nathan!它像一個魅力工作:)再次感謝您的幫助! – pipp5

+0

太棒了!隨意將答案標記爲「接受」,以便未來的其他人也可以從答案中獲益。 – nathan