Recommended
PPTX
PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
PDF
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
PDF
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
PPTX
PDF
PDF
PDF
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
PDF
Unityでパフォーマンスの良いUIを作る為のTips
PDF
【Unite Tokyo 2019】Understanding C# Struct All Things
PDF
PPTX
BuildKitによる高速でセキュアなイメージビルド
PDF
MagicOnion~C#でゲームサーバを開発しよう~
PDF
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
PDF
FridaによるAndroidアプリの動的解析とフッキングの基礎
PDF
PPTX
Unityネイティブプラグインマニアクス #denatechcon
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
PPTX
PDF
C#次世代非同期処理概観 - Task vs Reactive Extensions
PDF
PDF
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
PDF
PDF
PDF
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
PDF
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
PDF
PDF
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
PDF
PDF
オブジェクト指向プログラミングのためのモデリング入門
More Related Content
PPTX
PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
PDF
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
PDF
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
PPTX
PDF
PDF
PDF
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
What's hot
PDF
Unityでパフォーマンスの良いUIを作る為のTips
PDF
【Unite Tokyo 2019】Understanding C# Struct All Things
PDF
PPTX
BuildKitによる高速でセキュアなイメージビルド
PDF
MagicOnion~C#でゲームサーバを開発しよう~
PDF
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
PDF
FridaによるAndroidアプリの動的解析とフッキングの基礎
PDF
PPTX
Unityネイティブプラグインマニアクス #denatechcon
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
PPTX
PDF
C#次世代非同期処理概観 - Task vs Reactive Extensions
PDF
PDF
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
PDF
PDF
PDF
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
PDF
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
PDF
PDF
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
Viewers also liked
PDF
PDF
オブジェクト指向プログラミングのためのモデリング入門
PDF
Swift らしい表現を目指そう #eventdots
PDF
NS Prefix - そこから見渡す Swift 3 の景色 #startup_mobile
PDF
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
PDF
俺のManaged Objectの使い方は間違っていた
PDF
VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法
PDF
Java in the Past, Java in the Future
PDF
PDF
Blending Culture in Twitter Client
PDF
PDF
みんなで Swift 復習会での談笑用スライド – 5th #minna_de_swift
PDF
みんなで Swift 復習会での談笑用スライド – in 札幌 1st′ #minna_de_swift
PPTX
PDF
みんなで Swift 復習会での談笑用スライド – 3rd #minna_de_swift
PDF
バ、バカな...!ハッカソンの中で成長しているだと...!?
PDF
PDF
PDF
あなたのオブジェクト指向はオブジェクト指向ではないかもしれない
PDF
Similar to Objective-C のキャストと Swift の型変換を比べてみる #akibaswift
PDF
すごいHaskell 第7章 型や型クラスを自分で作ろう(前編)
PDF
PDF
PDF
プロトコル指向 - 夢と現実の狭間 #cswift
KEY
PPTX
PDF
Protocol-Oriented Integers #cswift
PPT
PDF
PDF
20141128 iOSチーム勉強会 My Sweet Swift
PDF
Swift 2.0 で変わったところ「後編」 #cswift
PDF
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
PDF
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsap
PPTX
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
PDF
PDF
みんなで Swift 復習会での談笑用スライド – 4th #minna_de_swift
PDF
PDF
PDF
PDF
Swift Open Hours 2 - Swift ラボで聞いてきた話
More from Tomohiro Kumagai
PDF
PDF
_Function Builders in Swift #love_swift
PDF
Swift クラスのイニシャライザー #devsap
PDF
イニシャライザー Part 2.5 #hakataswift
PDF
Property Wrappers の特徴を眺める #swiftzoomin
PDF
みんなで Swift 復習会
GO! in 札幌 – 10th′′
PDF
みんなで Swift 復習会 GO! in 岩手 – 9th′
PDF
みんなで Swift 復習会 GO! in "Swift Days Fukuoka" – 12nd′ オープニング&資料
PDF
みんなで Swift 復習会 GO! in 福岡 – 8th′ #minna_de_swift
PDF
macOS アプリで Swift Package Manager を使ってみる #love_swift #hakataswift
PDF
みんなで Swift 復習会 GO! in 福岡 – 5th′
PDF
みんなで Swift 復習会
GO! in 京都 – 6th′
PDF
Getting Started with iOSCon in London #love_swift #ioscon
PDF
Getting Started with Attending iOSCon in London 高画質・追記版 #love_swift #ioscon
PDF
Around the 変数 let #love_swift
PDF
iOSCon 2019 in London #ioscon #love_swift
PDF
PDF
ニコニコ超会議・文化の交差点 #techpub #ニコニコ超会議 #さくらシンデレラ
PDF
勉強会の東京外開催の気持ち #yuru_bounen2017
PDF
最近気づいた勉強法 — 勉強会開催の習慣化 #yumemi_grow
Recently uploaded
PPTX
JavaScript/TypeScript実力強化書 2章のアップデート Forkwell Library
PDF
20251122_OWASPNagoya_takei_ITU-T,X.1060,security
PDF
Gluesync:RDBMS、NoSQL,データレイク間のリアルタイム・データレプリケーション
PDF
N2WS Backup & Recovery と Veeam Backup for AWS
PDF
最高峰のストレージとバックアップ:ARTESCA+Veeam:統合型ソフトウェア
PDF
Veeam&WasabiでトリプルV: クラウドへのランサムウエア対策の決定コンビ
Objective-C のキャストと Swift の型変換を比べてみる #akibaswift 2. 3. 5. 7. 10. NSInteger integerValue = 10;
double doubleValue = 128.9;
// 明示キャスト
NSUInteger value1 = (NSUInteger)integerValue;
NSInteger value2 = (NSInteger)doubleValue;
char value3 = (char)integerValue;
double value4 = (double)integerValue;
11. NSInteger integerValue = 10;
double doubleValue = 128.9;
// 暗黙キャスト
NSUInteger value1 = integerValue;
NSInteger value2 = doubleValue;
char value3 = integerValue;
double value4 = integerValue;
12. NSInteger integerValue = -8000000000000002345;
double doubleValue = 123456789.935;
// 誤差が出るキャスト
NSInteger value1 = doubleValue; // 123456789
double value2 = integerValue; // -8000000000000002048
NSUInteger value3 = integerValue; // 10446744073709549271u
short value4 = doubleValue; // -13035
13. doubleValue + floatValue // double
floatValue + doubleValue // double
doubleValue + longDoubleValue // long double
intValue + floatValue // float
intValue + charValue // int
intValue + longValue // long
charValue + shortValue // int
14. 1 / 3.0 // 0.3333333333333333
1 / 3.0f // 0.33333333f
1 / 3 // 0
1 / 3.0 == 1 / 3 // false
1 / 3.0 == 1 / 3.0f // false
15. int a = 1, b = 3, c = 5, d = 4;
// 明示キャストによる制御
c * (a / b * d) // 0
c * (a / (double)b * d) // 6.666666666666666
c * (int)(a / (double)b * d) // 5
(int)(c * ((double)a / b * d)) // 6
c * (double)(a / b) * d // 0
16. short shortValue = 0x7FFF;
long longValue = 0x12345678;
// 再解釈キャスト
short value1 = *(short*)&longValue; // 0x5678
long value2 = *(long*)&shortValue; // 0x6080000000207FFF
double value3 = *(double*)&longValue; // 1.508974781700064e-315
17. NSData *data = [[NSMutableData alloc] init];
// アップキャスト
NSObject *obj1 = (NSObject*)data;
// ダウンキャスト
NSMutableData *obj2 = (NSMutableData*)data;
18. NSData *data = [[NSMutableData alloc] init];
// アップキャスト
NSObject *obj1 = data;
// ダウンキャストは明記が必要
NSMutableData *obj2 = (NSMutableData*)data;
19. NSString *obj = [[NSString alloc] init];
// 無関係な型へのキャスト
NSNumber *number = (NSNumber*)obj;
// メソッドが存在しなければ実行時エラー
NSString *text = [number descriptionWithLocale: nil];
20. id object;
// 可能性の判定
if ([object isKindOfClass:[NSNumber class]])
{
// 整合性が約束されればキャストを実施
NSNumber *number = (NSNumber*)object;
}
25. let integerValue: Int = 65
let doubleValue: Double = 128.9
// 型を変換
let value1 = UInt(integerValue)
let value2 = Int(doubleValue)
let value3 = UnicodeScalar(integerValue)
let value4 = Double(integerValue)
26. let sourceValue: UInt = 18446744073709551615
// 変換できないとき
let value1 = Int(sourceValue)
let value2 = Int("120x") // nil
let value3 = try MyValue(sourceValue) // Error
27. let source: UInt = 18446744073709551000
// 型を変換
let value1 = Int(bitPattern: source) // -616
let value2 = Int8(truncatingBitPattern:source) // -104
28. let source: Int64 = 0x12345678
// 再解釈
var value1 = unsafeBitCast(source, Double.self)
// 1.508974781700064e-315
var value2 = unsafeBitCast(source, Int32.self)
29. as as? as!
let instance: NSData = NSMutableData()
// アップキャスト
let object1 = instance as NSObject
// ダウンキャスト
let object2 = instance as? NSMutableData
let object2 = instance as! NSMutableData
30. let instance: NSData = NSMutableData()
// アップキャスト
let object1: NSObject = instance
// ダウンキャスト
let object2 = instance as? NSMutableData
let object2 = instance as! NSMutableData
31. let object = NSString()
// 無関係な型へのキャスト
let number1 = object as? NSData // nil
let number2 = object as! NSData // ERROR
35. 36. (int)value Int(value)
[instance toDouble] Double(instance)
(SubClass*)object
(BaseClass*)object
object as? SubClass
object as BaseClass
[object isKindOfClass:
[SomeClass class]]
if let obj = object
as? SomeClass {
*(double*)&value
unsafeBitCast(
value, Double.self)
39. 40. 41. 42. 43. @interface ESMyObject : NSObject
// NSLocale からの変換?
- (instancetype)initWithLocale:(NSLocale)locale;
// 自分自身から NSPoint への変換?
- (NSPoint)toPoint;
@end
45. 46. 47. 48. 49. struct MyValue {
// ラベル名を伴う場合は Full-Width 変換ではない
init(locale: NSLocale) {…}
// これがもし Full-Width 変換なら
// NSPoint に変換イニシャライザとして実装したい
func toPoint() -> NSPoint {…}
}
51. 52.
init / init?
init … throws
54. 55. // 一般に Optional Binding とセットで使う
if let number = instance as? NSData {
}
else {
// キャストできなかった場合も想定できる
}
56. 57. 59. let workData = NSMutableData()
// 継承関係より NSData で扱えるのは明らか
let data = workData as NSData
60. // 中身的には NSMutableData 型でも、
let instance: AnyObject = NSMutableData()
// 外見からは NSData にキャスト出来るか分からない
// こういうときは as? または as! でのキャストが必要
let data = instance as? NSData
61. let string = String()
// ブリッジ機構は Swift 標準ライブラリが提供
let objcString = string as NSString
62. 64. (SubClass*)instance instance as? SubClass
(SubClass*)instance instance as! SubClass
(BaseClass*)instance instance as BaseClass
(BaseClass*)instance instance as? BaseClass
(SomeClass*)instance instance as SomeClass
isKindOfClass:
conformsToProtocol:
instance is SomeType