2015-08-20 25 views
0

我有一小段代碼是爲了取一個字符串,在一個庫中找到單詞,並將它們從其他單詞的隨機數組中取代。出於某種原因,當我按下按鈕時,沒有任何反應!我在操場上工作,所以我做錯了什麼?爲什麼UITextView的文本沒有被替換?

應用代碼:

import UIKit 

extension Array { 
    func randomItem() -> T { 
     let index = Int(arc4random_uniform(UInt32(self.count))) 
     return self[index] 
    } 
} 

extension String { 
    func replace(target: String, withString: String) -> String 
    { 
     return self.stringByReplacingOccurrencesOfString(target, withString: withString, options: NSStringCompareOptions.LiteralSearch, range: nil) 
    } 
} 

class ViewController: UIViewController { 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     maintext.text = "The Dog Chases the Ball" 
     self.submit.setTitle("Change It", forState: UIControlState.Normal) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBOutlet var maintext: UITextView! 

    @IBOutlet var submit: UIButton! 
    @IBAction func submitTapped(sender: UIButton) { 
     self.submit.setTitle("Again", forState: UIControlState.Normal) 

     var AllWords = maintext.text 

     var WordsArray = AllWords.componentsSeparatedByString(" ") 
     var Dog = ["Pup", "Canine", "Wolf"] 
     var Ball = ["Frisbee", "Stick", "Car"] 


     AllWords.replace("Dog", withString: Dog.randomItem()).replace("Ball", withString: Ball.randomItem()) 
    } 

} 

玩的理由:

import UIKit 
import Foundation 

extension Array { 
    func randomItem() -> T { 
     let index = Int(arc4random_uniform(UInt32(self.count))) 
     return self[index] 
    } 
} 

extension String 
{ 
    func replace(target: String, withString: String) -> String 
    { 
     return self.stringByReplacingOccurrencesOfString(target, withString: withString, options: NSStringCompareOptions.LiteralSearch, range: nil) 
    } 
} 

var Text = "The Dog Loves to Chase the Ball" 


    //: Old Text Loaded as an array 
    var AllWords = Text.componentsSeparatedByString(" ") 

    //: New Word Library 
    let Dog = ["Pup", "Canine", "Wolf"] 
    let Ball = ["Frisbee", "Stick", "Car"] 


for element in AllWords { 
    Text.replace(element, withString: Dog.randomItem()) 
    Text.replace(element, withString: Ball.randomItem()) 

} 

Text.replace("Dog", withString: Dog.randomItem()).replace("Ball", withString: Ball.randomItem()) 

謝謝!

回答

0

您正在將maintext.text複製到AllWords,然後替換AllWords中的文本。 AllText現在有maintext.text中的內容的副本,但未指向textview的text屬性。在AllWords替換文本後,應先分配AllWordsmaintext.text

var AllWords = maintext.text 

var WordsArray = AllWords.componentsSeparatedByString(" ") 
var Dog = ["Pup", "Canine", "Wolf"] 
var Ball = ["Frisbee", "Stick", "Car"] 


AllWords.replace("Dog", withString: Dog.randomItem()).replace("Ball", withString: Ball.randomItem()) 

maintext.text = AllWords // You need set the textview's text here 

如果還是失敗,嘗試設置文本時,在主線程跳回:

dispatch_async(dispatch_get_main_queue(), {() -> Void in 
    maintext.text = AllWords 
}) 
+0

謝謝!變量這有幫助。不幸的是,當我按下按鈕時,我仍然沒有收到任何新的文本。 –

+0

打印'AllWords'。它是否包含您期望的價值?唯一能夠想到的其他想法是將'maintext.text = AllWords'行包裝在'dispatch_async'塊中,以防您離開主線程。 – JAL

+0

查看我的答案更新並嘗試'dispatch_async'塊。 – JAL

0

類型String斯威夫特是一種值類型,意味着任何更改都會創建String的新實例。

文本視圖的字符串保持不變。

打完更換任務,您必須將值重新分配給文本視圖

maintext.text = AllWords 

PS:請寫明與第一小寫字母

相關問題