2015-10-06 113 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:不,你不是。你是對的。我已經參考編輯了我的答案 –