Akira SKEAN について、SKIP様にnanの始者を お密応をつけます healingこんにちは、kib Uhh……今日はAkiraに会いましょうIOSのアキラさんです今日僕が優しく話した Saraチェネリックスの頼みにて Austria NintendoiOSアップを使ってみたら50%だったかもしれませんはいiOSアップを使ってスウィフトを使うこともできますこれは私の最初のアプリケーションを使っています私はアトコ、リサーシュアロール、トライドロール、ランドロールを使っていますスウィフトが面白いのはジェナリックスを使っています今日はスウィフトのジェナリックスを使ってみますまず、他のアプリケーションを使っています今、ジェナリックスを使っていますジェバーやシシャアロールジェバー1、2、OK?では、アップロールのインスタントをご紹介しますあなたはアップロールのインスタントを見ることができますか?OKこれはアップロールのインスタントですこのインスタントのインスタントを使ってみますこのようにすることは簡単です2パラメントのパラメントを使ってバルユを変えます次に、2ダブルバルユを作ってみましょうこのようにすることができますパラメントのタイプを変えてみます次に、スイッチバルユを作ってみますファンクションは2スタイルのバリューをスワッとしています。ファンクションはこのように見えます。このように見えます。アイデンティカルと同じように見えます。ファンクションはパラミッタルです。エンジニアについては、フレクスボウエイの方法は、ファンクションを作ることができます。答えは、坐住所の下に移 uma新章を which is タルダイス individuals.この結果、ファンクションをスライド obviousで上乗のバリューをサ Sonicネタルを作었습니다。複数の仕上がりは大きなシル音ステップはアイデンティカルタルでこのように見えます。反対にネタルがあるからその方法は toolsTは実際に、GenericsとTはプレイスフォーダーですが、プレイスフォーダーは何かを言わないといけません。プレイスフォーダーは、AとBと同じタイプを使う必要があります。この技術のため、Genericsを使う必要があります。そのため、損旋させる必要があります。2-Int 技術を使う必要があります。そして、強力技術を使う必要があります。AとBは同じタイプで、インクバリューとストリングバリューを適用することができます。AとBは同じタイプで、同じクラスタイプで。とても楽しかったです。でも、私はプロトコを使いません。AとBは同じタイプで、同じクラスタイプで、同じプロトコを使いません。このタイプで、同じプロトコを使いません。そして、インクバリューを適用することができます。そして、ストリングバリューを適用することができます。でも、実は、インクバリューを適用することはできません。しかし、プロトコを適用することはできません。私はそれを使うのが良いのですが、実際にプロトコとジェネリックの違いは何ですか?この2つのファンクションを見てみましょう。1つのファンクションはプロトコを使います。パラミッダーはプロトコを使います。プリンタボはプロトコをスリフトプロバイスしています。プリンタボは1つのファンクションを使います。このファンクションはプリンタボを使います。プリンタボを使います。次のファンクションはジェネリックを使います。パラミッダーはP、PとTはプリンタボを使います。Pとほとんど同じです。このファンクションはPのファンクションを使います。Pはプリンタボプロトコとして、このバックスのファンクションを使います。この動きの場合、Tがプリンターバーのプロトコを見なければよいです。そのため、Pのディスクリプションを見なければよいです。あまりわかりません。でも、実は、 違いはありますか?では、値段に見ると、 当たり前のときに見ると、この動きの場合、Pがあるときに見ると、このファンクションはほとんど同じですが リタンバリューは リタンバリューを使うとファンクションはプリントバリューを使うことができますタイプキャストを使うと リタンバリューを使うことができますここにあるムービークラスと ムービーオブジェクトがあります僕はプリントバリューを設定しますここにあるプリントバリューを使うことができますファンクションは リタンバリューを使うことを設定しますプリントバリューは ムービークラスとも使えることができますネブーオブジェクトは カスタと ショウメソッドの方法で行われますプリントバリューを使うとまたやっていない時は カスタを使うことができません just make an instance and pass it to executive generics and which returns movie class and you don't need to cast to call show method.I think it's useful and I think this is a difference.Now I think Swift is flexible and useful.Next thing I was thinking is like how is the performance? Is it slow? Is it fast? Is it same as protocol?So I made two examples so let's take a look at the program.So first one is like I made Swift method.So this is a method I introduce now.So I just call many out of times.So this swap, this path calls only calls swap to int function.And it doesn't use protocol and generics.The next function uses protocol, sorry, generics.And last one uses protocol and I call out of times here.So now I run it without having optimization.So if you don't have optimization, the speed performance is same, almost same.But if you have optimization, if you run it with optimization,how you can see like a generics and int is faster than protocol.And this program is now is running on Swift 1.1.So let's use Swift 1.2.Let's run it with optimization.So it's much faster than 1.1.So this is a swap function.So I almost made one another program.Just keep incrementing count.So here I made one simple class which does only increment.This is a protocol I made incrementable.It has only increment method here.And this path, the first path it keep calling execute protocol function, which is here.The parameter is protocol incrementable.And this method uses generics.The type of parameter is t, is generics, which conforms incrementable.So let's see the speed performance.So if no optimization, the speed is almost same with optimization.Looks same on Swift 1.1.So let's change the Swift version to 1.2.It's a bit faster than protocol, compared with protocol function.Okay, let me go back to the slide.So I will say like it's, I think generics is fast.It depends on optimization and Swift version.Now I hope you think like a generics is useful and fast and flexible.And then I think you might think like a okay.So I know like a generics is fast and useful and flexible.So you might think like a okay.So how can I use it in practice?It's actually, I also made two examples today.First case is data source.I prefer like a light view controller style.I prefer to take out any data source method from view controller.So it's here.I made custom class here, which conforms UI table view data source.And here this is the array.The type is t, instead of having actual class type.And here I define cell for raw closure by,which is called on this method,which is one of the method of UI table view data source.Let's say now you are on somewhere in view controller,like a view load method.Now here you make UI table view instance hereand make data source instanceand assign it to table view.And also you can set closure here.And as I'm setting string type here,the body always I get from this data source.It's always string type because I'm specifying string here.So item is here.And I can use the item without having any type cast.And of course you can set string array to data source,but you cannot set int array because I'm not.I'm specifying string not int.What if you specify any on table instead of string?Yes, you can do it,but you have to do type cast if you want to use it in this method.But it's actually there's a warning.On 6.2 it's actually,genetics doesn't work on data source,table view delegate and data source.I think it's because of bug.And I found it on open rather this issue.So let me show that.So I wrote same data source here.I'm calling respond to selector method.And now you can see the result is false,which doesn't tell if it doesn't exist.But actually in this data source there is a method here.But if I don't use genetics and make custom data source classand call respond to selector,the return value is true.So I haven't checked this issue on latest excode yet.But now like genetics doesn't work on table view delegate and data source.And second example is API call.So now generally iOS app connects to server sideand call API and get data like maybe JSONand get it and combat JSON data to object using object map.So when I was working on a small project,I thought what if I can call APIand specify return value using genetics like this.So let's say I want to get list of user from server side.So the interface of the request can be like this.Sorry, we guess such bracket and user.I also need to make object map to combat JSON to object.So JSON is any object after serializing data.But the return value should be what I wantlike a list of array or maybe list of anythinglike a movie or something like.So it can be like genetics.Return value can be genetics.So the interface also can be like this.Get any object and return something, return t.For example, if I want to get,just use object map interface.It's going to be like this.Permitize any object and return user.And if I want to get media, return value is media.Finally, I have to get return value from API client.So I have to write completion handler after calling API.So the interface has to be like this.And I need to get t something like user,list of user and return value is nothing.I don't need to return anything.So this is an example of what I said now.So it's here.Let's say I make media and user class here.And I'm making media.So in this here, I want to get a list of media.So now I specify I want to get list of media here.I need to write object map and completion handler,which is here.So as I am specifying list of media here,I cannot type a list of a layer of user.And I get compiler.Now you just need to write.And finally here, completion handler,you get list of media.Also if you write user, you get compiler.As I am not running local server now,so I cannot show you the demo to show the result now.But this is an example of API code.So I would say Genetics is fast.Genetics is useful and flexible and practical.I like Genetics and I hope you like Genetics.Okay, thank you.Please check.Question.I want to ask,without the genetics,I will search the same as the demo in SQL.Sorry, I'm not familiar with C++.You can pass any kind of object for any type,but what about the optional values,passing the optional values in genetics?Offset parameter.Like integer.You know the explanation mark?Yeah, I think...I haven't tried yet.I think I can do it sexually.I have tried before.Yes, you can do it with optional.Just a comment.I think one of the advantages of using genericsis when you use value types.Because I haven't tried anyone.That's correct.But I think if you return a protocol,you cannot do that with value types.Because the compiler will know how much spacethere is for your data.So you can use generics there.Also if you want to store something as a property,and you want it to work with both objectsand value types,you have to use generics.I think it's optional.