Contenu connexe
Similaire à Xamarin.iOS 開発者から見た Swift (20)
Plus de Tomohiro Suzuki (13)
Xamarin.iOS 開発者から見た Swift
- 5. Xamarin.iOSとは
5
Xamarin Native Xamarin Forms
ロジックのみ共通化
UIはネイティブで個別に作りこむ
ロジックとUIを共通化
UIは各プラットフォームの
同じ役割のUIが自動マッピング
Shared C# App Logic
(.NET Standard)
iOS
C# UI
Android
C# UI
Windows
C# UI
Shared C# App Logic
(.NET Standard)
Shared C# UI Code
(Xamarin.Forms)
ここが
Xamarin.iOS
- 12. Swift も C#もできること自体に差はない
• できることは基本的に一緒。
• だが、C#の文法に古さを感じてしまう。
• セミコロン必須。
• 言語レベルでのディクショナリサポートが無い。(クラスのインポートが必要)
• Optionalをサポートしない。
• Swift は世代が新しいので、モダンなコードが書けてカッコイイ。
12
- 13. Optional ってエレガント。C#にも早く欲しい
• 安全で、モダンな感じがカッコイイ。
• C#7 でも値型(struct) では Nullable を利用できる。
• C#8 で導入予定とのこと。
13
Swift
let string: String? = "Swift"
if let bindString = string
{
bindString = bindString.uppercaseString
}
C#
var text = "CSharp";
if (!string.IsNullOrEmpty(text))
{
var bindString = text.ToUpper();
}
- 14. その他、シンタックスシュガーが充実
• コードから冗長部分がなくなりスッキリする。
• エレガントなコードが書ける。
14
Swift
var c = { print("Swift") }
c()
var dictionary = ["one": 1, "two": 2]
for (key, value) in dictionary
{
print( "key = (key), value =
(value)" )
}
C#
Action c = () => Console.WriteLine("CSharp");
c();
var dic = new Dictionary<string, int>() { {"one",
1}, {"two", 2} };
foreach (var kvp in dic)
{
Console.WriteLine("key = {0}, value = {1}",
kvp.Key, kvp.Value);
}
- 15. プロトコトルのメソッドが区別ができない??
15
Swift
extension PhotoCaptureProcessor : AVCapturePhotoCaptureDelegate
{
func photoOutput(_ output: AVCapturePhotoOutput, willBeginCaptureFor resolvedSettings: AVCaptureResolvedPhotoSettings)
{
}
func photoOutput(_ output: AVCapturePhotoOutput, willCapturePhotoFor resolvedSettings: AVCaptureResolvedPhotoSettings)
{
}
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?)
{
}
なぜ
メソッド名が一緒??
- 16. プロトコトルのメソッドが区別ができない??
16
C#
[Protocol]
[Register ("AVCapturePhotoCaptureDelegate", false)]
public class AVCapturePhotoCaptureDelegate : NSObject, IAVCapturePhotoCaptureDelegate, INativeObject, IDisposable
{
[Export("captureOutput:willBeginCaptureForResolvedSettings:")]
public virtual void WillBeginCapture(AVCapturePhotoOutput captureOutput, AVCaptureResolvedPhotoSettings resolvedSettings);
[Export("captureOutput:willCapturePhotoForResolvedSettings:")]
public virtual void WillCapturePhoto(AVCapturePhotoOutput captureOutput, AVCaptureResolvedPhotoSettings resolvedSettings);
[Export ("captureOutput:didFinishProcessingPhoto:error:")]
public virtual void DidFinishProcessingPhoto (AVCapturePhotoOutput output, AVCapturePhoto photo, NSError error);
メソッド名が Swift と違うExport 属性を見ると判断できる
- 18. まとめ
18
Swift は iOS, macOS が中心にあり、言語とプラット
フォームが密接に結びついている。
C# は mono の存在により、言語の独立性が高い。
Swift には覚えれば覚えるほど
ハマって行く魅力がある。
Swift ではなく iOS API にハ
マって行くのかも知れない。
C# はそのようなカリスマ的魅力は感
じないが、素人に優しくツールとして
万人に受け入れられやすい。
Apple と マイクロソフトの特徴がよく表れている。