在打印时显示的文本视图中可选

时间:2017-02-02 00:47:12

标签: swift text optional unwrap

大家好我已尝试了一些解决方案,但没有运气。

我从Data Core获取文本,但textview上有可选项。

打印时,它在文本中显示为可选。

page22TextView?.text = ("\(trans.value(forKey: "page22"))")

任何人都可以阐明这一点!我试图解开它,但它仍然是stillelow:显示。

完整功能如下:

func getTranscriptions () {
    //create a fetch request, telling it about the entity

    let fetchRequest: NSFetchRequest<TextInputs> = TextInputs.fetchRequest()


    do {
        //go get the results
        let searchResults = try getContext().fetch(fetchRequest)

        //I like to check the size of the returned results!
        print ("num of results = \(searchResults.count)")

        //You need to convert to NSManagedObject to use 'for' loops
        for trans in searchResults as [NSManagedObject] {


            page22TextView?.text = ("\(trans.value(forKey: "page22"))")
            //get the Key Value pairs (although there may be a better way to do that...
            print("\(trans.value(forKey: "page22"))")

        }
    } catch {
        print("Error with request: \(error)")
    }
}

3 个答案:

答案 0 :(得分:1)

尝试设置获取nil值的默认值

page22TextView?.text = (trans.value(forKey: "page22") as? String) ?? ""

它会从trans设置您的值,如果它由nill设置后退""

希望它能帮到你。

答案 1 :(得分:0)

尝试使用展开可选项,如果让然后分配到您的textview(如果有必要,然后向下转换您的值)

if let value = trans.value(forKey: "page22") {
   page22TextView?.text = value
}

use guard for unwrap

答案 2 :(得分:0)

尝试使用 if-let 语句:

if let result = trans.value(forKey: "page22") {

    page22TextView?.text = result
}

或尝试后卫声明:

guard let result = trans.value(forKey: "page22") else { return }
page22TextView?.text = String(describing: result)

或者你可以强制上传,如:

let result = trans.value(forKey: "page22")

if result != nil {

    page22TextView?.text = result! as! String
}

或者你可以按照下面的@MrugeshTank建议的方式回答