переключайтесь между Swift 3 и Swift 4.

о, что я делаю сейчас:

extension Decimal {
    var formattedAmount: String {
        let formatter = NumberFormatter()
        formatter.generatesDecimalNumbers = true
        formatter.minimumFractionDigits = 2
        formatter.maximumFractionDigits = 2
        return formatter.string(from: self) //mismatch type
    }
}

но я не могу создатьNSNumber изDecimal.

 Martin R25 окт. 2017 г., 15:09
string(for: self) - сравнитьstackoverflow.com/a/29999137/1187415
 Martin R25 окт. 2017 г., 15:21
Задокументировано, как метод «абстрактного» суперклассаFormatter изNumberFormatter.
 Martin R25 окт. 2017 г., 15:12
Или жеstring(from: self as NSDecimalNumber) - сравнитьstackoverflow.com/q/41148782/1187415
 Ahmad F25 окт. 2017 г., 15:19
@MartinR Я не заметил существованияstring(for: self) это задокументировано ?, Я собирался добавить ответ, как упомянуто во втором комментарии, сейчас уже поздно :)

Ответы на вопрос(2)

Этот:

formatter.string(from: ...) // requires a NSNumber

Вы можете сделать это:

formatter.string(for: self) // which takes Any as argument

Или же:

string(from: self as NSDecimalNumber) // cast self to NSDecimalNumber
 Martin R25 окт. 2017 г., 15:24
Синтаксис сделалне переключайтесь между Swift 3 и Swift 4.
Решение Вопроса

Это должно работать

extension Decimal {
    var formattedAmount: String? {
        let formatter = NumberFormatter()
        formatter.generatesDecimalNumbers = true
        formatter.minimumFractionDigits = 2
        formatter.maximumFractionDigits = 2
        return formatter.string(from: self as NSDecimalNumber)
    }
}

Ваш ответ на вопрос