2016-09-25 50 views
1

這是正常工作的功能:不能轉換類型的返回式「字符串」返回類型「(INT) - >字符串」

func doSomeThing(productName : String , productPrice : Double) -> String { 

     return "good jobs" 
    } 

我會思考功能可以採取數量參數和返回字符串

func doSomeThing(productName: String , productPrice: Double) -> (Int) -> String{ 

    func totaPrice(quantity : Int) -> Double { 

     return Double(quantity) * productPrice 

    } 
    return "Product Name \(productName) each price is \(productPrice) , total price \(totaPrice)" 
} 

let totaPrice = doSomeThing(productName: "iPhone", productPrice: 649) 
print(totaPrice(5)) 
print(totaPrice(3)) 

但低於誤差投擲:

ERROR位於線14,列11:不能轉換類型 '字符串' 返回類型的返回表達「(I nt) - >字符串' return'產品名稱(productName)每個價格是(productPrice),總價格(totaPrice)「 ^ ~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~

如何解決這個問題?

注意:我想要做一些類似Currying的功能。

回答

2

你的函數頭說,你是返回一個閉包需要一個Int並返回一個String,所以這是你的函數應該返回什麼。

下面是一個使用所有的輸入來構造一個例子的String

func doSomeThing(productName: String, productPrice: Double) -> (Int) -> String { 
    return { n in "\(n) \(productName)s cost \(productPrice * Double(n))" } 
} 

let iPhone = doSomeThing(productName: "iPhone", productPrice: 649) 
print(iPhone(5)) 
print(iPhone(2)) 

輸出:

5的iPhone成本3245.0
2的iPhone成本1298.0

+0

好! ,有沒有其他辦法? –

+1

你用這種方式反對什麼? – vacawama

+0

我想讓它變得更簡單,更甜美。 –

1

我認爲問題是你試圖在一種方法中返回兩次。相反,只需要你的方法需要3個參數並返回一個String。

func doSomeThing(productName : String , productPrice : Double, quantity : Int) -> String { 
    let total = productPrice * Double(quantity) 
    return "The total for \(productName) is \(total)" 
} 

doSomeThing(productName: "my product", productPrice: 1.99, quantity: 1) 
+0

否先生!我想嘗試像Currying功能。 –

相關問題