Сетевой каркас имеет сбойный инициализатор для структур IPv4Address и IPv6Address, которые принимают конструктор String. Для проверки адреса достаточно просто проверить, можно ли инициализировать Struct со строкой.
Это особенно полезно для адресов IPv6, которые имеют длинный формат с нетривиальными правилами сокращения.
import Network
let addresses = ["1.2.33.44","1.265.33.33","2001:db8::35:44","2001:db8::33::44"]
for address in addresses {
if let _ = IPv4Address(address) {
print("address \(address) is a valid IPv4 address")
} else if let _ = IPv6Address(address) {
print("address \(address) is a valid IPv6 address")
} else {
print("address \(address) is neither an IPv4 address nor an IPv6 address")
}
}
вывод:
address 1.2.33.44 is a valid IPv4 address
address 1.265.33.33 is neither an IPv4 address nor an IPv6 address
address 2001:db8::35:44 is a valid IPv6 address
address 2001:db8::33::44 is neither an IPv4 address nor an IPv6 address