Swift 1.1です。
例えばこんなクラスがあるとして、このURLがhttps://から始まってるかを判定したいとします。
class User {
var url: String?
}
Swiftぽいかなと自分が思ってる書き方はこうだけど、ifがネストするのがちょっと嫌。elseがしんどい。
if let url = user.url {
if url.hasPrefix("https://") {
println("HTTPS!")
}
}
これはコンパイルエラーになります。
if let url = user.url && url.hasPrefix("https://") {
println("HTTPS!")
}
これもコンパイルエラー。戻り値がnil or Boolだからダメみたい。
if user.url?.hasPrefix("https://") {
println("HTTPS!")
}
これは通るけど、、、、負けた気がする。美しくない!
if user.url?.hasPrefix("https://") == true {
println("HTTPS!")
}
これもなんかオプショナル型の敗北を感じてしまうので間違ってる気がする。
if user.url? && user.url!.hasPrefix("https://") {
println("HTTPS!")
}
Ruby on Railsならこれでいいのに
if user.url.try(:start_with?, "https://")
puts "HTTPS!"
end
どう書くのがいいんだろう。
追記
コメントで教えていただきましたが、swift 1.2ではif let where
でこの悩みが解決するそうです。
便利!そしてタイムリーな悩みでしたw
if let url = user.url where url.hasPrefix("https://") {
println("HTTPS!")
}