Если вы используете только функцию mail()
, вам нужно заполнить конфигурационный файл.
Вам нужно открыть расширение почты и установить SMTP smtp_port
и т. д., и самое главное, ваше имя пользователя и пароль. Без этого почта не может быть отправлена. Кроме того, вы можете использовать класс PHPMail для отправки.
Римские цифры не имеют однозначного соответствия десятичным разрядам. Вы написали последовательности римских цифр от 1 до 9 (одиночные десятичные цифры). Также есть римские цифры для 10, 50, 100, 500 и 1000.
Если вы хотите преобразовать большое количество в римских цифрах до десятичных знаков вам нужно разобрать его. Сначала вам нужно будет обрабатывать эти более крупные единицы.
Распечатайте на бумаге, как вы делаете преобразование самостоятельно, небольшими шагами. Затем напишите эти шаги в псевдокоде. (Не беспокойтесь о синтаксисе, просто нарисуйте шаги.)
Наконец, используйте псевдокод в качестве руководства для написания вашей программы Swift.
Все, что вам нужно, - это перебрать ваши символы строки в обратном порядке и сопоставить эти значения символов. Начните с maxValue равным нулю, переключите значение букв, сохраните его как maxValue, и если значение равно maxValue, добавьте его, иначе вычтите фактическое значение. Вы также можете использовать regex (строгий или нет) для проверки и выдачи ошибки в случае ее отказа. Попробуйте вот так:
Xcode 9.x • Swift 4.x
Примечание: для версии Swift 3 или ранее проверьте историю изменений.
extension String {
enum RomanParsingError: Error {
case invalidNumber
}
func romanNumeralValue() throws -> Int {
guard range(of: "^(?=[MDCLXVI])M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$", options: .regularExpression) != nil else {
throw RomanParsingError.invalidNumber
}
var result = 0
var maxValue = 0
uppercased().reversed().forEach {
let value: Int
switch $0 {
case "M":
value = 1000
case "D":
value = 500
case "C":
value = 100
case "L":
value = 50
case "X":
value = 10
case "V":
value = 5
case "I":
value = 1
default:
value = 0
}
maxValue = max(value, maxValue)
result += value == maxValue ? value : -value
}
return result
}
}
использование:
do {
let decimal = try "MCMLXXVIII".romanNumeralValue()
print(decimal) // 1978
} catch {
print(error)
}
do {
let decimal = try "IIIV".romanNumeralValue()
print(decimal)
} catch {
print(error) // "invalidNumber\n"
}
var result = 0
до return result
и поместите это в свою функцию с параметром и измените uppercaseString etc...
на [parameter_name].uppercaseString etc...
. Но почему бы вам не использовать простое расширение? Что это меняет?
– brimstone
30 April 2016 в 03:52