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の実装
RawOptionSetTypeはBitwiseOperationsTypeとして実装されました。これによりimportされたNS_OPTIONSでも|=、 &=および^=が利用可能となりました。
StringとCharacterの首尾一貫性
StringとCharacterのふるまいがArrayと同様になりました。つまり+は必ず結合を意味し、要素追加には使えなくなったということです。String + Characterは今後エラーとなります。Character + Character や String + String は引き続き有効です。
void* -> UnsafePointer<Void>
Cのvoid*をimportする際、()ではなくVoidタイプエイリアスが用いられるようになりました。たとえば以前UnsafeMutablePointer<()>だったものはUnsafeMutablePointer<Void>となります。ただし意味論的には以前と同様です。
所感
今回は少なめかな…
Dan.the.Swift.Newbie