2017-06-05 9 views
0

IAPのアプリがあります。私は、場所に基づいて価格を表示する必要があります。私はこれまでこれを作った。今私は場所に基づいて価格を表示することができます。通貨記号と値の間のスペース:iOS swift 3

ただし、通貨記号と値の間にはスペースが必要です。 つまり、私は$ 9.99が必要です(現在$ 9.99を示しています)。

FYI:私はiTunesから価格を取得しています(価格を取得してテキストビューに表示するために変数を使用しました)。

私は成功せず、これを続いている:NSNumberFormatter paddingPosition doesn't work

私もこれを言及しているが、それは同様に動作しません: Swift 3 and NumberFormatter (.currency) == ¤?

任意の提案を?

私はこれやっている:

var index: Int = 0 { 
    didSet { 

     var monthlyValue = String() 

     if prefs.value(forKey: "monthly") != nil { 

      monthlyValue = prefs.value(forKey: "monthly") as! String 


     } 

     let subcharges : Array<String> = ["Free but limited just to get started","or \(monthlyValue) Billed Monthly",""] 

     let yearlypermonth = Int() 

     var mycurrency1 = String() 

     if prefs.value(forKey: "yearly") != nil { 

      let yearlyvalue = prefs.value(forKey: "yearly") as! String 

      print("wallet view yearlyvalue: \(yearlyvalue)") 

      let firstProduct = StoreManager.shared.productsFromStore[0] 

      if let mycurrency = firstProduct.priceLocale.currencySymbol { 

       print("mycurrency: \(mycurrency)") 

       mycurrency1 = mycurrency 
       prefs.set(mycurrency, forKey: "mycurrency") 

      } 

      let formatter = NumberFormatter() 
      formatter.numberStyle = .currency 
//    formatter.paddingPosition = .afterPrefix 
// 
//    //formatter.locale = Locale(identifier: "en_US") 
//    formatter.paddingCharacter = " " 
//    formatter.formatWidth = 7 


      let number1 = formatter.number(from: yearlyvalue) 

      print("wallet view number1: \(number1)") 

      let secondProd = StoreManager.shared.productsFromStore[1] 

      let numberFormatter = NumberFormatter() 
//    numberFormatter.paddingPosition = .afterPrefix 
//    numberFormatter.paddingCharacter = " " 
//    numberFormatter.formatWidth = 7 
      // Get its price from iTunes Connect 
      numberFormatter.locale = secondProd.priceLocale 
      let price2Str = numberFormatter.string(from: secondProd.price) 

      let currencynumbers2 = secondProd.price.doubleValue/12 

      monthonValueforaYear = String(format: "%.2f", currencynumbers2) 

      print("walletview VC monthonValueforaYear: \(monthonValueforaYear)") 

      //prefs.set(price2Str, forKey: "yearly") 
      prefs.set(monthonValueforaYear, forKey: "monthonValueforaYear") 

     } 
     var charges : Array<String> = ["\(mycurrency1) 0/m","\(mycurrency1 + monthonValueforaYear)/m","Coming Soon"] 

     print("wallet view charges: \(charges)") 

     self.Headingtitle.text = Headingarray[index] 
     self.planchargelabel.text = charges[index] 
     self.subchargelabel.text = subcharges[index] 

を興味深いことに、subchargelabel値のために、私は私がアプリケーションを実行しようとした一方で、コメントセクションがコメント解除された小さなスペースに

を取得します。ちょうどあなたがそれを知っている

あなたの助けてくれてありがとう!

答えて

0

以下のように必要な文字列をフォーマットしてください。

let priceWithSpace: String? = firstProduct.priceLocale.currencySymbol + " " + product.price 
0

記号、スペース、量を入力するだけでは効果がありません。シーケンスはロケールや通貨によって異なる場合があります。以下の方法で答えが得られます。あなたは通貨間のスペースを持っていると思ったよう

func customFormattedAmountString(amount: Int) -> String? { 
    let formatter = NumberFormatter() 
    formatter.numberStyle = .currency 
    formatter.locale = Locale.current 

    if let amountString = formatter.string(from: NSNumber(value: amount)) { 
     // check if it has default space like EUR 
     let hasSpace = amountString.rangeOfCharacter(from: .whitespaces) != nil 

     if let indexOfSymbol = amountString.characters.index(of: Character(formatter.currencySymbol)) { 
      if amountString.startIndex == indexOfSymbol { 
       formatter.paddingPosition = .afterPrefix 
      } else { 
       formatter.paddingPosition = .beforeSuffix 
      } 
     } 
     if !hasSpace { 
      formatter.formatWidth = amountString.characters.count + 1 
      formatter.paddingCharacter = " " 
     } 
    } else { 
     print("Error while making amount string from given amount: \(amount)") 
     return nil 
    } 

    if let finalAmountString = formatter.string(from: NSNumber(value: amount)) { 
     return finalAmountString 
    } else { 
     return nil 
    } 
} 

以下のようにそれを使用して、ドルを印刷します

if let formattedAmount = customFormattedAmountString(amount: 5000000) { 
    print(formattedAmount) 
} 

$ 5,000,000.00 

とユーロ、

5.000.000,00 € 

記号と金額。最初の回答のように文字列を追加するだけの場合は、「5.000.000,00€」が必要です。「5.000.000,00€」は必要ありません。

関連する問題