Cannot convert return expression of type 'Aspect?' to return type 'String'


#1

Добрый день.

Подскажите, пожалуйста, как воспользоваться функцией из библиотеки SwissEphemeris https://github.com/vsmithers1087/SwissEphemeris, выдает ошибку.

Cannot convert return expression of type ‘Aspect?’ to return type 'String’

Сама функция должна возвращать аспект между двумя планетами:

func testAspects() -> String {

let date = Date()
let aspect = Aspect(pair: Pair<Planet, Planet>(a: .sun, b: .moon), date: date, orb: 8.0)
return aspect

}

Ccылка на Aspect.swift


#2

Ваша функция func testAspects() -> String ожидает, что вы вернёте строку, а вы пытаетесь вернуть Aspect.

То есть надо поменять возвращаемый тип:
func testAspects() -> Aspect
Другая проблема заключается в том, что инициализатор у Aspect опциональный и не всегда возвращает значение. Значить нужно:

  • либо рисковать и анврапить:
    return aspect!
  • либо возвращать опционал:
    func testAspects() -> Aspect?
  • либо возвращать ошибку:
func testAspects() throws -> Aspect {
   let date = Date()
   guard let aspect = Aspect(pair: Pair<Planet, Planet>(a: .sun, b: .moon), date: date, orb: 8.0) else {
   throw Error...
}
   return aspect
}

#3

А как мне вывести результат этой переменной в Text?
Text ("\(testAspects())")
выдает ошибку: Instance method ‘appendInterpolation(_:formatter:)’ requires that ‘Aspect?’ inherit from ‘NSObject’. или No exact matches in call to instance method 'appendInterpolation’


#4

Так а что вы конкретно хотите вывести из этого Aspect? там есть 2 параметра String и Double


#5

Я бы хотел и String и Double посмотреть. Только не знаю как это сделать.


#6

Aspect возвращает вам объект, для просмотра параметров нужно обратиться к ним через точку.

let symbol= aspect.symbol
let remainder = aspect.remainder

#7

Text ("\(testAspects().symbol)")

No exact matches in call to instance method 'appendInterpolation


#8

покажите ваш метод testAspects


#9

func testAspects() -> Aspect {

let date = Date()
let aspect = Aspect(pair: Pair<Planet, Planet>(a: .sun, b: .moon), date: date, orb: 8.0)

return aspect!
}


#10

это уже строковое значение, значит оборачивать в кавычки не нужно.


#11
                Text (testAspects().symbol)

Value of optional type ‘String?’ must be unwrapped to a value of type 'String’


#12

А вот это уже основы свифта, попробуйте сами разобраться.


#13

Ага спасибо большое, получилось. начинаю разбираться
Text (testAspects().symbol!)


#14

Учитесь на будущее избегать такого извлечения опционалов.
Лучше всего делать проверку и в случае, когда значения нет, выводить соответствующий текст.