投稿

Swift 2.0でStringはどうなったか - 特殊文字などの扱い

イメージ
Objective-CのNSStringの仕様は自然ではなかったので、Swiftには期待しています。 Swift2.0でStringの仕様がだいぶ変わったということで検証してみます。 昔は何が困ったか 今回のStringの仕様の検証は、昔の仕様で困っていた部分が動機になっているので、まずそれを書きます。NSStringでは文字を基本的に16ビットで扱っていますが、文字の中には16ビットで扱えないものがあり、そういうものは32ビットなど他の長さで使用します。そのごちゃごちゃはUnicodeの仕様上仕方ないのですが、NSStringではその32ビット文字を2文字としてカウントするなどUnicodeのごちゃごちゃをうまくさばききれていなくて扱いが雑な部分がありました。 欲しいものは、内部で何ビットだろうとどういうどういうデータ状態であろうと、人間が一文字と認識するものは一文字として扱うというポリシーに従ったAPIです。 Swiftが発表になったときにUnicodeとの親和性もアピールしていたので期待しています。 The Swift Programming Languageを読む まずはいつものThe Swift Programming Languageで基本をおさらい。 ・Stringはvalue typeである(reference typeではない)。 ・Stringの文字列に含まれている個々の文字へのアクセスにはStringのcharactersプロパティからアクセス出来る。 ・SwiftのStringは内部ではUnicode scalarをベースにしている。Unicode scalarとは文字や記号に対応する21ビットの数。U+0000からU+D7FFとU+E000からU+10FFFFがある。U+D800からU+DFFFは含まない。U+が何かというのは大変ややこしいので割愛。 ・人間が文字と認識する形式がExtended Grapheme Cluster。SwiftのCharacterは一つのExtended Grapheme Clusterに対応。 一つのExtended Grapheme Clusterは一つ以上のUnicode scalarで構成される 。 ・Stringの文字数カウントはcharactersプロパティのcountプロ...

Swiftブログの要点まとめ 2015

イメージ
appleの公式Swiftブログ(英文) の各記事の要点を日本語でまとめます。 英語のトレーニングを兼ねて... Swift is Open Source 2015年12月3日 Swiftはオープンソースになりました。 関連項目は Swift.org Swiftに関わる人のためのサイト github.com/apple ソースコードの置き場 Swiftパッケージマネージャーというコードを共有したりビルドするためのツール Swiftネイティブコアライブラリというスタンダードライブラリの上のレベルのもの LinuxだけでなくAppleのプラットフォームにも対応 Literals in Playgrounds 2015年10月7日 Playgroundでファイル、色、画像の扱いが可能になりました。 Swift 2 Apps in the App Store 2015年9月21日 Swift 2で作成したアプリが提出可能になりました。 Xcode 7はSwift 2を含みます。Swift 1.2から変更するにはEdit > Convert > To Latest Swift Syntaxを使用して下さい。 OS X El CapitanでXcodeを使うならXcode7を要求します。Xcode 6を使い続けるならOS X Yosemiteのままにして下さい。Xcode 7とYosemiteの組み合わせはOK。 Swift-er SDK 2015年8月12日 Xcode 6.3でObjective-Cに新しい機能のnullability annotationsが付きました。SwiftのOptionalに相当します。 Strings in Swift 2 2015年7月23日 Swift 2ではStringの仕様が変わります。 今までStringはCharacterのコレクションとして扱ってきましたがSwift 2ではそうではありません。Swift 2ではStringはcharactersというプロパティを持ち、そのcharactersプロパティがコレクション(文字の集まり)の性質を請け負います。 変更の理由は、StringはArrayやSet,Dictionaryといったコレクションとは極め...

Xcode7の時点でCertificate(証明書)とProvisioning Profileの作成は(ほぼ?)全自動に

イメージ
Certificate(証明書)とProvisioning Profileを全部削除した状態で、Xcode7でデバッグ(手元デバイスでの動作チェック)とストアへの申請を行い、どの程度自動作成機能が使える状態になっているか確認する。頻繁にチェックしているわけではないので実はXcode6のときにすでに出来ていたと言われる可能性もあるが、とりあえずやってみる。 1、developer.apple.comのCertificates,Identifiers & ProfilesページでCertificateとProvisioning Profileを全部削除する。App IDとDeviceは使用するものが設定してある。App IDはそれぞれのアプリ個別のもののみがある。 2、Xcode7の環境設定の中のAccountsのView Details...ボタンをクリック。出てきた一覧表に上下2つのエリアがありますが、上のSigning IdentitiesはCertificateに対応しているようです。Provisioning Profileがあれば(ローカル環境に残ったもの?)削除する。Signing IdentitiesのiOS DevelopmentとiOS DistributionにはCreateボタンがあるが作成はせずにスルー。 3、Xcode7でプロジェクトを開く。Bundle Identifierは設定してある。当然、No provisioning profiles foundの黄色警告が出る(ターゲット設定のGeneralタブのIdentitiy)。修正するためのFix Issueボタンも表示される。この時点でシミュレータでは実行可能。 実デバイスで実行しようとするとNo Provisioning profiles foundの赤色アラームが発生。実デバイスでの実行は不可。 4、ここでお待ちかねのターゲット設定のGeneralタブのIdentitiyのFix Issueボタンを押す(裏で何をやっているかわからないから好きではないという意見もあるかも)。すると iOS DevelopmentのCertificateが作成 され(Createボタンが消える)、App IDにも Xcode iOS Wildcard App IDという...

iOS9対応でやったこと

[NSLocale preferredLanguages] [NSLocale preferredLanguages]で返ってくる言語設定が iOS8まで ja iOS9から ja-US のようになったので対応。 isEqualToString:@"ja" から hasPrefix:@"ja" へ変更すればOKと思いましたが ジャマイカ... が脳裏をよぎり isEqualToString:@"ja"とhasPrefix:@"ja-"のORにしておきました。 NSManagedObjectContext [[NSManagedObjectContext alloc] init]が9.0でdeprecatedになったので [[NSManagedObjectContext alloc] initWithConcurrencyType:] に変更しようと思ったがConcurrencyTypeの設定が難しすぎて一旦保留。 Requires full screen iPadアプリで「全方向対応でない場合はRequires full screenをONにするように」というワーニングが出たのでONにする(そのアプリは縦のみ対応)。 このパラメータはSlide OverやSplit Viewで画面の一部の表示をされたくない時にもONにするものらしい。 (追記 : 以下のバグはXcode7.1.1では修正されていました) ちなみにiOS9.0 Xcode7.0の段階でSlide OverやSplit Viewを有効にするとなぞのバグ(?)があって、 フルスクリーン状態で(Slide OverやSplit View状態ではない)デバイスを回転させて、UIDeviceOrientationDidChangeNotificationを受けた時に self.view.bounds.size.width self.view.bounds.size.height が変更前の状態で取得されてしまって使えなくなるという現象があった。その値を元に全体の要素を配置しているので、縦にすると横の配置になり、横にすると縦の配置になるという現象。 [[UIApplicati...

SwiftでのdrawRect()

UIViewのdrawRec()メソッド内で線を描いたり円を描いたりするやり方について。 CGContextなんとかという関数を用いる方法が広く紹介されているが、実はUIBezierPathというクラスもある。これはCGContextなんとかを機能的にラッパーしたクラス。Appleの資料によるとこちらの方がおすすめらしいのでこれを中心に紹介していく。Bezierというとややこしい数式を用いた描画というイメージがあって名前で少し敬遠してしまうが、線を引いたり丸を描いたりといった単純な描画でもこのクラスをメインにするといい。UIPathのようなシンプルな名前にしておけばもっと人気(?)が出たかもしれない。 描くときの大まかな流れは 1 線の太さや使用する色を指定 2 パス(線要素)を必要なだけ足していく。 3 描画指令を出す となる。 UIBezierPathを使った描画 //色の設定 UIColor.redColor().setFill() UIColor.blueColor().setStroke() UIColorに色設定メソッドがあります。UIBezierPathというのはPathに関するものなので色は専門外なんでしょう。 でここからUIBezierPathのメソッドです。 //空インスタンス作成 let line = UIBezierPath() //線の太さ line.lineWidth = 2 //開始点 line.moveToPoint(CGPointMake(10, 10)) //追加点 line.addLineToPoint(CGPointMake(20,20)) //パスを描く line.stroke() //パスを閉じる line.closePath() //円や楕円 let daen = UIBezierPath(ovalInRect: CGRectMake(100, 100, 100, 100)) //四角 let shikaku = UIBezierPath(rect: CGRectMake(100, 100, 100, 100)) //中を塗る daen.fill() shikaku.fill() //角が丸い四角 let kadomaruSHi...

Swift資料の英単語 - Using Swift with Cocoa and Objective-C

実際に資料を読みながらわからなかった単語を記載していく。 英語は得意というわけではないので若干の誤りがあるかもしれない。 本文に合わせて多少変更した意味になっているところもある。 Using Swift with Cocoa and Objective-Cの範囲です。 Getting Started Interoperability 相互に操作出来ること? interface 連結する take advantage of を利用する Migration 移行 identical 一致する delineation 記述? reside 居住する vend 販売する、(この文脈では)供給する leverage 投資する、(この文脈では)導入する Interoperability Interacting with Objective-C APIs come over やってくる get sliced off 外される respective それぞれの consistency 一貫性 audit 検査する Mix and Match incorporate 取り入れる coexist 同時に同じ場所に存在する co + exist straightforward わかりやすい depict 表現する メモ Bridging-Headerを使う。SwiftからアクセスしたいObjective-CのヘッダーファイルをBridging-Headerに書く。 Xcode-generated headerを使う。Objective-CからアクセスするSwiftのファイルが書かれる。 Migration revisit 再検討する hassle やっかいごと

詳細!Swift iPhoneアプリ開発 入門ノート

表紙はiOSプログラミング本にはめずらしいオレンジ色。(初版) 6章以降は、アプリを作ったことがあるとちょうどいい内容です。サンプルはなかなかコアなところを選んである。 今までiOSアプリを作ったことがない人が、これで一からやろうとするときついと思う。今までにいくつかアプリを作った人でないと理解できないような表現がけっこうある。