Swift 2无法删除可选绑定

时间:2015-11-17 05:18:19

标签: ios swift uitableview optional

我是Swift的新手,并且对可选(!,?)没有更多的想法。我试图从plist中获取数据,创建模型并显示到Optional()。表数据显示完美,但它显示var fileName : String? var dataArray : Array<SHQuesAns>? 绑定。我试过改变!至 ?但无法解开。你能不能指导我解决这个问题。

这是我的代码&amp;输出 -

fetch

来自pList -

func loadTableView(){ dataArray = SHDataAccess.init(fname: fileName).arrayFromPlist() self.questionTableView.dataSource = self self.questionTableView.delegate=self self.questionTableView.reloadData() } 数据
SHDataAccess

import UIKit var fileName : String! class SHDataAccess: NSObject { init(fname:String?) { super.init() fileName = fname } func arrayFromPlist() -> Array <SHQuesAns>?{ let dataPlists = NSMutableArray(contentsOfFile:NSBundle.mainBundle().pathForResource(fileName, ofType: "plist")!) var dataObj : Array <SHQuesAns>? = Array() for data in dataPlists! { dataObj?.append(SHQuesAns.init(_dic: data as! NSDictionary)) } return dataObj } } 课程 -

UITableView

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return dataArray == nil ? 0 : dataArray!.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let aCell = self.questionTableView.dequeueReusableCellWithIdentifier("qcell",forIndexPath: indexPath) as! SHQuestionCell let q : SHQuesAns = dataArray![indexPath.row] aCell.lblQuestion.text = "\(q.question)" return aCell } 代表 -

$('#modal-form-edit').on('show.bs.modal', function(e) {
  var books_id = $(this).data('id');
  $('.select2_single option[value="'+books_id+'"]').attr('selected','selected');
 });

这是输出 -

enter image description here

3 个答案:

答案 0 :(得分:2)

这将删除Optional()文本:

if let q = q.question as? String {

    aCell.lblQuestion.text = "\(q.question!)"

} else {

    aCell.lblQuestion.text = ""

}

关键是打开问题对象中包含的字符串,以便在将其分配给标签文本时,不会包含Optional()部分。

如果未定义问题字符串,我已添加对nil案例的支持。

答案 1 :(得分:1)

您可能还考虑不将dataObj数组作为可选项?它的目的是什么?在我看来,如果你需要向数组添加项目,那么你知道它应该存在,并且因为你已经初始化它,它将始终存在但是可能是空的。相反,只是让它隐式展开,然后如果没有数据则返回nil,那么数组的对象都不会是可选的。

答案 2 :(得分:0)

如果你有一个默认值,你希望可选字符串回退,一个简单的修复就像这样:

"\(q.question ?? "")"

如果q.question为nil

,则默认为空字符串

另外:小心你所有的力量打开。有一些警卫陈述或者如果让它解开,可能更有意义。

和swift数组的编写方式如下:var dataArray : [SHQuesAns]?

但是你需要区分一个nil数组和一个空数组的情况并不多,所以你可以只做var dataArray = [SHQuesAns]()并节省自己打开的需要