Получение ошибки Нет кандидатов ‘ ‘, которые выдают ожидаемый контекстный результат типа ‘NSString’

#ios #swift3

#iOS #swift3

Вопрос:

Я пишу код на swift 3 и Xcode 8.

Вот код:

 import Foundation
import UIKit

class CashTextFieldDelegate : NSObject, UITextFieldDelegate {

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {


    let oldText = textField.text! as NSString

    var newText = oldText.replacingCharacters(in: range, with: string) as NSString

    var newTextString = String(newText)

    let digits = NSCharacterSet.decimalDigits
    var digitText = ""
    for c in newTextString.unicodeScalars {
        if digits.contains(c) {
            digitText.append(String(c))
        }
    }

    // Format the new string
    if let numOfPennies = Int(digitText) {
        newText = "$"   self.dollarStringFromInt(numOfPennies)  "."   self.centsStringFromInt(numOfPennies)

    } else {
        newText = "$0.00"
    }

    textField.text = newText as String

    return false
}

func textFieldDidBeginEditing(_ textField: UITextField) {
    if textField.text!.isEmpty {
        textField.text = "$0.00"
    }
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    textField.resignFirstResponder()

    return true;
}

func dollarStringFromInt(value: Int) -> String {
    return String(value / 100)
}

func centsStringFromInt(value: Int) -> String {

    let cents = value % 100
    var centsString = String(cents)

    if cents < 10 {
        centsString = "0"   centsString
    }

    return centsString
}

}
  

для этой строки кода сверху :

 newText = "$"   self.dollarStringFromInt(numOfPennies)   "."   self.centsStringFromInt(numOfPennies)
  

Я получаю такую ошибку:

 No ' ' candidates produce the expected contextual result type 'NSString'.
  

Не удалось устранить эту ошибку.

Любая помощь с небольшим объяснением будет оценена

Комментарии:

1. Вам нужно предоставить гораздо больше деталей. Показать, как объявляются все соответствующие переменные и функции.

2. Просто используйте интерполяцию строк .

Ответ №1:

В отличие от Swift 2, NSString и String не преобразуются автоматически друг в друга.

Попробуйте что-то вроде этого:

 newText = ("$"   self.dollarStringFromInt(numOfPennies)   "."   self.centsStringFromInt(numOfPennies)) as NSString
  

Вы можете дополнительно очистить это, используя согласованный тип — либо String или NSString повсюду (например, изменение возвращаемых функций и т. Д.).

Комментарии:

1. Последовал тому, что вы сказали, и сделал это. Но также добавлена метка значения. Это меня решило. newText = («$» self.dollarStringFromInt(значение: numOfPennies) «.» self.centsStringFromInt(значение: numOfPennies)) как NSString