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