Мой код ведет себя правильно, за исключением того факта, что предупреждения генерируются при компиляции, я не знаю, откуда они берутся, так как я учусь самостоятельно. Как я могу изменить свой код (части между FIXME BEGIN и FIXME END), чтобы код компилировался без предупреждений?
Код:
protocol EqualsMethod {
// Notice that the type-keyword "Self" helps to solve the
// curriously recurring interface pattern for direct self-reference
// FIXME-begin
func equality(my: Self) -> Bool;
// FIXME-end
}
struct my_int : EqualsMethod {
// FIXME-begin
func equality(my: my_int) -> Bool{
if (my.value == value){
return true;
}
return false
}
// FIXME-end
var value: Int;
}
// Returns the index of an element if it exists
// nil otherwise
func findIndex
// FIXME-begin
<T: EqualsMethod>
// FIXME-end
(valueToFind: T, array:[T]) -> Int? {
// FIXME-begin
for (k, e) in array.enumerated(){
if (valueToFind.equality(my: e))
{
return k;
}
}
// FIXME-end
// Index not found
return nil
}
let ints = [my_int(value: 1),
my_int(value: 2),
my_int(value: 3),
my_int(value: 4),
my_int(value: 5)]
print(findIndex(valueToFind: my_int(value: 2), array: ints))
print(findIndex(valueToFind: my_int(value: 0), array: ints))
ожидаемый вывод:
Optional(1)
nil
предупреждения:
main.swift:49:7: warning: expression implicitly coerced from 'Int?' to 'Any'
print(findIndex(valueToFind: my_int(value: 2), array: ints))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
main.swift:49:7: note: provide a default value to avoid this warning
print(findIndex(valueToFind: my_int(value: 2), array: ints))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
?? <#default value#>
main.swift:49:7: note: force-unwrap the value to avoid this warning
print(findIndex(valueToFind: my_int(value: 2), array: ints))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
main.swift:49:7: note: explicitly cast to 'Any' with 'as Any' to silence this warning
print(findIndex(valueToFind: my_int(value: 2), array: ints))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
as Any
main.swift:50:7: warning: expression implicitly coerced from 'Int?' to 'Any'
print(findIndex(valueToFind: my_int(value: 0), array: ints))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
main.swift:50:7: note: provide a default value to avoid this warning
print(findIndex(valueToFind: my_int(value: 0), array: ints))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
?? <#default value#>
main.swift:50:7: note: force-unwrap the value to avoid this warning
print(findIndex(valueToFind: my_int(value: 0), array: ints))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
main.swift:50:7: note: explicitly cast to 'Any' with 'as Any' to silence this warning
print(findIndex(valueToFind: my_int(value: 0), array: ints))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
as Any