LoginSignup
87
86

More than 5 years have passed since last update.

Swift - Xcode 6 Beta 6 における変更点

Posted at

Xcode6 Beta5からまだ2週間ですが、Xcode6 Beta6が登場しています。この調子で二週間ごとにベータ版出すのかなApple...

というわけで前回に引き続き、ダウンロード待ちの手慰みに。

Optional型に関するさらなる改良

Foundation APIにおけるOptional型の見直しがさらに進んでいます。T!の多くが、nilを取りうる場合はT?、そうでない場合はTへと変更されています。間違いを見つけた方は、“#IUO”をSubjectに含めた上でRadarでご報告ください。なお、T!のまま据え置かれているものに関しては報告不要です。Appleでも把握しています。

T?であるべきところがTとなっている場合、以下のように明示的にOptional型を指定して代入したのち直ちにアンラップすることで回避できます。

var fooOpt: NSFoo? = object.reallyMightReturnNil()
if let foo = fooOpt { ... }

このバグを見つけたら、忘れずにご報告を。

??の改良

??演算子に、以下のオーバーロードが追加されました。

 public func ?? <T> (optional: T?, defaultValue: @autoclosure () -> T?) -> T? {
     switch optional {
     case .Some(let value):
       return value
     case .None:
       return defaultValue()
     }
}

これにより、x = optional1 ?? optional2 ?? defaultValueのふるまいが期待どおりのものとなり、以下の事例が修正されます。

let a: Int? = nil
let b: Int? = 5
a ?? b // was nil; is now .Some(5)

RawOptionSetTypeにおけるBitwiseOperationsTypeの実装

RawOptionSetTypeBitwiseOperationsTypeとして実装されました。これによりimportされたNS_OPTIONSでも|=&=および^=が利用可能となりました。

StringCharacterの首尾一貫性

StringCharacterのふるまいがArrayと同様になりました。つまり+は必ず結合を意味し、要素追加には使えなくなったということです。String + Characterは今後エラーとなります。Character + Character や String + String は引き続き有効です。

void* -> UnsafePointer<Void>

Cのvoid*importする際、()ではなくVoidタイプエイリアスが用いられるようになりました。たとえば以前UnsafeMutablePointer<()>だったものはUnsafeMutablePointer<Void>となります。ただし意味論的には以前と同様です。

所感

今回は少なめかな…

Dan.the.Swift.Newbie

87
86
0

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
87
86