2015-10-06 151 views
1

我在类中的方法:迅速函数返回对象或零

func myFunc() -> Any? 
{ 
    let fetchRequest  = NSFetchRequest(entityName: "Product") 
    fetchRequest.predicate = NSPredicate(format: "shopitem == %@", self.objectID) 
    fetchRequest.fetchLimit = 1; 
    do 
    { 
     fetchResults = try self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [Product] 
    } 
    catch 
    { 
     fatalError("Fetching from the store failed") 
    } 

    if fetchResults.count > 0 
    { 
     return fetchResults.first 
    } 
    return nil 
} 

然后调用在另一类这个方法。但是如何检查从它返回的对象:

let product = MyClass.myFunc() as! Product 
cell.productTitleLabel.text = product.product_title 

这段代码返回错误,如果我的方法返回nil。

+2

查找'为'(的*可选*铸)和'如果让'(可选绑定)在Swift书中... –

+4

是否有一个特殊的原因,你的函数返回'Any?'而不是'Product?'? –

回答

0

一个简单的解决办法是设置你的产品变量之前做了简单的检查:

if let product = MyClass.myFunc() as? Product { 
    cell.productTitleLabel.text = product.product_title 
} 
3

可以使用条件类型转换处理这种情况。 (参见Type Casting):

if let product = MyClass.myFunc() as? Product 
{ 
    cell.productTitleLabel.text = product.product_title 
} 

此外,如果你需要检查你可以用这样的返回值的类型:?

var product = MyClass.myFunc() 
if product is Product 
{ 
    // Do stuff 
} 
+1

我可能错了,但我不认为这是*可选链*。 –

+0

@MartinR:不,你不是。你是对的。我已经参考编辑了我的答案 –