読者です 読者をやめる 読者になる 読者になる

A Day In The Life

とあるプログラマの備忘録

【Swift1.2対応】プロの力が身につく iPhone/iPadアプリケーション開発の教科書 Swift対応版

ios 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] {