Swift: Nil несовместим с возвращаемым типом String

У меня есть этот код в Swift:

guard let user = username else{
        return nil
    }

Но я получаю следующие ошибки:

Nil is incompatible with return type String

Кто-нибудь из вас знает, почему или как я возвращаю ноль в этом случае?

Я буду очень признателен за вашу помощь


person user2924482    schedule 13.11.2015    source источник
comment
вы не можете вернуть значение Nil в swift, измените тип возвращаемого значения String в своем методе   -  person Anbu.Karthik    schedule 13.11.2015
comment
это может помочь вам stackoverflow.com/questions/32232392/   -  person swiftBoy    schedule 13.11.2015
comment
покажите больше кода вашей функции, а именно ее возвращаемый тип.   -  person luk2302    schedule 13.11.2015
comment
@ Anbu.Karthik вы можете вернуть nil в swift, если тип возвращаемого значения является необязательным (необязательный тип реализует NilLiteralConvertible). Проблема в том, что возвращаемый тип метода — String. Если он хочет иметь возможность возвращать nil, тогда тип возвращаемого значения должен быть String?   -  person Kevin    schedule 13.11.2015


Ответы (3)


Вы должны сообщить компилятору, что хотите вернуть nil. Как ты это делаешь? Назначив ? после вашего объекта. Например, взгляните на этот код:

func newFriend(friendDictionary: [String : String]) -> Friend? {
    guard let name = friendDictionary["name"], let age = friendDictionary["age"] else {
        return nil
    }
    let address = friendDictionary["address"]
    return Friend(name: name, age: age, address: address)
}

Обратите внимание, как мне нужно было сообщить компилятору, что мой объект Friend, который я возвращаю, является необязательным Friend?. В противном случае он выдаст ошибку.

person Josue Gisber    schedule 04.08.2018
comment
Очень хороший ответ. - person iOS; 03.03.2021
comment
Спасибо! Очень признателен. - person Erik van der Neut; 18.04.2021

Объявляет ли ваша функция необязательный тип возвращаемого значения?

func foo() -> Строка? { ...

Подробнее см. на: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html

ПРИМЕЧАНИЕ

Концепция опционалов не существует ни в C, ни в Objective-C. Ближайшая вещь в Objective-C — это возможность возвращать nil из метода, который в противном случае возвращал бы объект, причем nil означает «отсутствие допустимого объекта».

person Andrei Nagy    schedule 13.11.2015

*Объявляет ли ваша функция необязательный тип возвращаемого значения?

func minAndmax(array:[Int])->(min:Int, max:Int)? {
    if array.isEmpty {
        return nil
    }

    var currentMin = array[0]
    var currentMax = array[0]

    for value in array {
        if value < currentMin {
            currentMin = value
        }
        else if value > currentMax {
            currentMax = value
        }
    
    }
    return (currentMin, currentMax)
}

if let bounds = minAndmax(array:  [8, -6, 2, 109, 3, 71]) {
    print(bounds)
}
person Lakshmipathi KV    schedule 20.10.2020