LoginSignup
15
10

More than 5 years have passed since last update.

Swiftのオプショナル型からBoolを返すメソッド呼ぶときの書き方

Last updated at Posted at 2015-02-24

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!")
}
15
10
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
10