【Swift1.2対応】プロの力が身につく iPhone/iPadアプリケーション開発の教科書 Swift対応版
iOS が8.3にバージョンアップしたのに伴い Xcode が6.3に Swift が1.2にバージョンアップされました。Swift 1.2ではシンタックスエラーとなりビルドできなくなるコードがあります。本書で記載しているコードだけでなく、サンプルの自動生成コードにも変更が必要な箇所がありましたので修正しました。最新のサンプルコードはすべて Swift 1.2に対応済みです。
以降は、本書に記載されているプログラムの修正箇所になります。
Chapter2-1
p112 プログラム 4行目
訂正前
let button = UIButton.buttonWithType(UIButtonType.System) as UIButton
訂正後
let button = UIButton.buttonWithType(UIButtonType.System) as! UIButton
p112 プログラム 12行目
訂正前
fun respondToButtonClick(sender: UIButton!) {
訂正後
func respondToButtonClick(sender: UIButton) {
p115 1つ目のプログラム3行目
訂正前
func respondToButtonClick(sender: UIButton!) {
訂正後
func respondToButtonClick(sender: UIButton) {
p115 2つ目のプログラム5行目
訂正前
let button = UIButton.buttonWithType(UIButtonType.System) as UIButton
訂正後
let button = UIButton.buttonWithType(UIButtonType.System) as! UIButton
p115 2つ目のプログラム最後から1行目
訂正前
func respondToButtonClick(sender: UIButton!) {
訂正後
func respondToButtonClick(sender: UIButton) {
Chapter2-2
p127 2つ目のプログラム4行目
訂正前
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
訂正後
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
p138 1つ目のプログラム2行目
訂正前
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
訂正後
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
p138 1つ目のプログラム4行目
訂正前
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
訂正後
override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
p138 1つ目のプログラム6行目
訂正前
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
訂正後
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
p138 1つ目のプログラム8行目
訂正前
override func touchesCancelled(touches: NSSet!, withEvent event: UIEvent!) {
訂正後
override func touchesCancelled(touches: Set<NSObject>!, withEvent event: UIEvent!) {
Chapter2-3
p148 2つ目のプログラム4行目
訂正前
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath:indexPath) as UITableViewCell
訂正後
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath:indexPath) as! UITableViewCell
p159 1つ目のプログラム2行目
訂正前
as UICollectionViewCell
訂正後
as! UICollectionViewCell
p159 2つ目のプログラム12行目
訂正前
let header = collectionView.dequeueReusableSupplementaryViewOfKind( kind, withReuseIdentifier: "Header", forIndexPath: indexPath) as UICollectionReusableView
訂正後
let header = collectionView.dequeueReusableSupplementaryViewOfKind( kind, withReuseIdentifier: "Header", forIndexPath: indexPath) as! UICollectionReusableView
Chapter3-2
p178 1つ目のプログラム5行目
訂正前
let button = UIButton.buttonWithType(UIButtonType.System) as UIButton
訂正後
let button = UIButton.buttonWithType(UIButtonType.System) as! UIButton
Chapter3-3
p191 2つ目のプログラム5行目
訂正前
let paths = NSSearchPathForDirectoriesInDomains( .DocumentDirectory, .UserDomainMask, true) as Array<String>
訂正後
let paths = NSSearchPathForDirectoriesInDomains( .DocumentDirectory, .UserDomainMask, true) as! Array<String>
p192 1つ目のプログラム2行目
前のページからの続きになっている箇所です。
訂正前
let paths = NSSearchPathForDirectoriesInDomains( .DocumentDirectory, .UserDomainMask, true) as Array<String>
訂正後
let paths = NSSearchPathForDirectoriesInDomains( .DocumentDirectory, .UserDomainMask, true) as! Array<String>
p196 1つ目のプログラム2行目
訂正前
self.name = aDecoder.decodeObjectForKey("name") as String self.address = aDecoder.decodeObjectForKey("address") as Address
訂正後
self.name = aDecoder.decodeObjectForKey("name") as! String self.address = aDecoder.decodeObjectForKey("address") as! Address
p196 2つ目のプログラム19行目
訂正前
self.zipCode = aDecoder.decodeObjectForKey("zipCode") as String self.state = aDecoder.decodeObjectForKey("state") as String self.city = aDecoder.decodeObjectForKey("city") as String self.other = aDecoder.decodeObjectForKey("other") as String
訂正後
self.zipCode = aDecoder.decodeObjectForKey("zipCode") as! String self.state = aDecoder.decodeObjectForKey("state") as! String self.city = aDecoder.decodeObjectForKey("city") as! String self.other = aDecoder.decodeObjectForKey("other") as! String
p197 1つ目のプログラム20行目
p198 1つ目のプログラム9行目
訂正前
let paths = NSSearchPathForDirectoriesInDomains( .DocumentDirectory, .UserDomainMask, true) as [String]
訂正後
let paths = NSSearchPathForDirectoriesInDomains( .DocumentDirectory, .UserDomainMask, true) as! [String]
p198 1つ目のプログラム12行目
訂正前
let array = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as Array<Person>
訂正後
let array = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as! Array<Person>
p202 1つ目のプログラム9行目
p203 1つ目のプログラム9行目
p205 1つ目のプログラム9行目
p206 2つ目のプログラム9行目
訂正前
let paths = NSSearchPathForDirectoriesInDomains( .DocumentDirectory, .UserDomainMask, true) as [String]
訂正後
let paths = NSSearchPathForDirectoriesInDomains( .DocumentDirectory, .UserDomainMask, true) as! [String]
p206 2つ目のプログラム15行目
訂正前
let person = NSKeyedUnarchiver.unarchiveObjectWithData(data as NSData) as Person
訂正後
let person = NSKeyedUnarchiver.unarchiveObjectWithData(data as! NSData) as! Person
p219 1つ目のプログラム1行目
訂正前
let addressList = defaults.arrayForKey("address-list") as [NSData]
訂正後
let addressList = defaults.arrayForKey("address-list") as! [NSData]
p219 1つ目のプログラム3行目
訂正前
let person = NSKeyedUnarchiver.unarchiveObjectWithData(data as NSData) as Person
訂正後
let person = NSKeyedUnarchiver.unarchiveObjectWithData(data as NSData) as! Person
p229 1つ目のプログラム11行目
訂正前
let applicationDocumentsDirectory: NSURL = urls[urls.count-1] as NSURL
訂正後
let applicationDocumentsDirectory: NSURL = urls[urls.count-1] as! NSURL
p230 1つ目のプログラム2行目
訂正前
let model = NSEntityDescription.insertNewObjectForEntityForName("Event", inManagedObjectContext: context) as NSManagedObject
訂正後
let model = NSEntityDescription.insertNewObjectForEntityForName("Event", inManagedObjectContext: context) as! NSManagedObject
p252 2つ目のプログラム3行目
訂正前
let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as NSManagedObject
訂正後
let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as! NSManagedObject
p254 2つ目のプログラム7行目
訂正前
let person = NSEntityDescription.insertNewObjectForEntityForName(entity.name!, inManagedObjectContext: context) as NSManagedObject
訂正後
let person = NSEntityDescription.insertNewObjectForEntityForName(entity.name!, inManagedObjectContext: context) as! NSManagedObject
p257 1つ目のプログラム5行目
訂正前
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
訂正後
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
p277 1つ目のプログラム16行目
訂正前
let dict = NSMutableDictionary()
訂正後
var dict = [String: AnyObject]()
Chapter4-2
p312 1つ目のプログラム3行目から4行目
訂正前
let ope = object as HttpOperation let responseString: String = NSString(data: ope.responseData, encoding:NSUTF8StringEncoding)!
訂正後
let ope = object as! HttpOperation let responseString: String = NSString(data: ope.responseData, encoding:NSUTF8StringEncoding) as String!
Chapter4-3
p318 2つ目のプログラム9行目
訂正前
let payment = SKPayment(product: product as SKProduct)
訂正後
let payment = SKPayment(product: product as! SKProduct)
p319 1つ目のプログラム3行目
p323 1つ目のプログラム3行目
p327 1つ目のプログラム22行目
訂正前
for transaction in transactions as [SKPaymentTransaction] {
訂正後
for transaction in transactions as! [SKPaymentTransaction] {
p333 1つ目のプログラム8行目
訂正前
let productRequest = SKProductsRequest(productIdentifiers: set)
訂正後
let productRequest = SKProductsRequest(productIdentifiers: set as Set<NSObject>)
p334 1つ目のプログラム1行目
訂正前
let payment = SKPayment(product: product as SKProduct)
訂正後
let payment = SKPayment(product: product as! SKProduct)
p334 1つ目のプログラム7行目、29行目、44行目
訂正前
for transaction in transactions as [SKPaymentTransaction] {
訂正後
for transaction in transactions as! [SKPaymentTransaction] {