Swift和C#的基本语法对比

Recently, Apple announced and released a beta version of the new Swift programming language for building iOS and OSX applications. Swift is a modern language with the power of Objective-C without the "baggage of C." While we can‘t argue that Objective-C has it‘s difficulties being tied closely to C, but the real question is... How does Swift compare to a modern language like C#?

Please, keep in mind that this post is not supposed to be an
Apple vs Microsoft post. There are a lot of developers that use C# every day and
the purpose of this post is to help them understand what Swift offers at a
language level compared to C#. And, before you start the "apples and oranges"
arguments, it‘s worth pointing out that using Xamarinyou can develop iOS
and OSX apps using C#.

Now let the code mostly speak for
itself...


Code
Comments

Both languages support the same syntax for code comments; the
familiar C-style comments.

  1. // code comment
  2. /* multi line
  3. code comment */

复制代码

Declaring Constants and Variables

Swift, like C#, is a type safe language. It also supports type
inference so you don‘t have to specify the type when declaring the variables as
the compiler can infer (or detect) the type by evaluating the assignment of the
variable. While C# is slightly more verbose when declaring constants; both
languages are just as elegant at declaring variables using type
inference.

  1. // Declare Constant
  2. // C#
  3. const int legalAge = 18;
  4. // Swift
  5. let legalAge = 18
  6. // Declare Variable
  7. // C#
  8. var legalAge = 18;
  9. // Swift
  10. var legalAge = 18

复制代码

While type inference is nice, but when you don‘t immediately
assign a value to the variable you may need to explicitly specify the type of
the variable.

  1. // Type Annotation
  2. //C#
  3. string firstName;
  4. // Swift
  5. var firstName: String

复制代码

You may notice the lack of the semi-colon in Swift. Yes, Swift
is a mostly C-style syntax without requiring semi-colons. Swift does support and
require the use of semi-colons if you want to have multiple code statements on
the same line.

Variable Names and
Unicode

Both languages support the use of Unicode characters as variable
names. Basically, you could use Emoticons or other non-ASCII characters as
variable names if you want, but who does that
anyway?

Integer Bounds

Both languages have static constants for accessing the minimum
and maximum bounds for the different Integer types.

  1. // Integer Bounds
  2. // C#
  3. var a = Int32.MinValue;
  4. var b = Int32.MaxValue;
  5. // Swift
  6. var a = Int32.min
  7. var b = Int32.max

复制代码

Type Inference

Both languages, as mentioned above, support type inference where
the compiler is able to detect what type the declared variable is from it‘s
immediate assignment.

  1. // Type Inference
  2. // C#
  3. var a = 3; // integer
  4. var b = 0.14 // double
  5. var c = a + b; // double
  6. // Swift
  7. var a = 3 // integer
  8. var b = 0.14 // double
  9. var c = a + b // double

复制代码

Also in the above type inference example you‘ll notice that when
you declare a variable and immediately assign a value that is the result of 2
other variables it will still infer the type.

String Comparison

Both have similar methods of comparing strings.

  1. // String Comparison
  2. // C#
  3. var a = "One";
  4. var b = "One";
  5. if (a == b) {
  6. // both variables are considered equal
  7. }
  8. // Swift
  9. var a = "One"
  10. var b = "One"
  11. if a == b {
  12. // both variables are considered equal
  13. }

复制代码

The both also have similar methods of detecting if the beginning
or ending of the string match‘s a specified string.

  1. // C#
  2. var s = "Some Value";
  3. if (s.StartsWith("Some")) {
  4. // the string starts with the value
  5. }
  6. if (s.EndsWith("Value")) {
  7. // the string ends with the value
  8. }
  9. // Swift
  10. var s = "Some Value"
  11. if s.hasPrefix("Some") {
  12. // the string starts with the value
  13. }
  14. if s.hasSuffix("Value") {
  15. // the string ends with the value
  16. }

复制代码

You may notice from the above example that parenthesis are not
required with IF statements in Swift.

String Upper or Lower Case

Both languages support similar methods of converting strings to
Upper or Lower Case.

  1. // String Upper and Lower Case
  2. // C#
  3. var s = "some Value";
  4. var upperS = s.ToUpper();
  5. var lowerS = s.ToLower();
  6. // Swift
  7. var s = "some Value"
  8. var upperS = s.uppercaseString
  9. var lowerS = s.lowercaseString

复制代码

Declaring Arrays

Both languages support declaring and assigning Arrays using a
single line of code.

  1. // Declare Arrays on single line
  2. // String Array
  3. // C#
  4. var arr = new string[] { "One", "Two" };
  5. // Swift
  6. var arr = ["One", "Two"]
  7. // Integer Array
  8. // C#
  9. var arr = new int[] { 1, 2 };
  10. // Swift
  11. var arr = [1, 2];

复制代码

Working with Arrays

Working with Arrays have slight differences between the
languages.

  1. // Iterating Over Array
  2. // C#
  3. foreach (var item in arr) {
  4. // do something
  5. }
  6. // Swift
  7. for item in arr {
  8. // do something
  9. }
  10. // Get Item at Index
  11. // C#
  12. var item = arr[0];
  13. // Swift
  14. var item = arr[0]
  15. // Set Item at Index
  16. // C#
  17. arr[0] = "Value";
  18. // Swift
  19. arr[0] = "Value"
  20. // Is Array Empty?
  21. // C#
  22. if (arr.Length == 0) {
  23. // array is empty
  24. }
  25. // Swift
  26. if arr.isEmpty {
  27. // array is empty
  28. }
  29. // Add Item to Array
  30. // C#
  31. Array.Resize(ref arr, arr.Length + 1);
  32. arr[arr.Length - 1] = "Three";
  33. // Swift
  34. arr.append("Three")
  35. // or
  36. arr += "Three"
  37. // Remove Item at Index
  38. // C#
  39. var list = arr.ToList();
  40. list.RemoveAt(0);
  41. var newArr = list.ToArray();
  42. // Swift
  43. var newArr = arr.removeAtIndex(0)

复制代码

Declaring Dictionaries

Both languages support similar methods of declaring
dictionaries.

  1. // Declaring Dictionaries
  2. // C#
  3. var dict = new Dictionary<string, string>();
  4. var dict2 = new Dictionary<string, string>
  5. {
  6. { "TYO", "Tokyo" },
  7. { "DUB", "Dublin" }
  8. };
  9. // Swift
  10. var dict = Dictionary<String, String>()
  11. var dict2 = ["TYO": "Tokyo", "DUB": "Dublin"]

复制代码

Working with Dictionaries

Working with Dictionaries have slight differences between the
languages.

  1. // Iterate over Dictionary
  2. // C#
  3. foreach(var item in dict) {
  4. var key = item.Key;
  5. var value = item.Value;
  6. }
  7. // Swift
  8. for (key, value) in dict {
  9. // key variable contains key of item
  10. // value variable contains value of item
  11. }
  12. // Get Item in Dictionary by Key
  13. // C#
  14. var item = dict["TYO"];
  15. // Swift
  16. var item = dict["TYO"]
  17. // Set Item in Dictionary by key
  18. // or add if key doesn‘t exist
  19. // C#
  20. dict["LHR"] = "London";
  21. // Swift
  22. dict["LHR"] = "London"
  23. // Remove Item in Dictionary by key
  24. // C#
  25. dict.Remove("LHR");
  26. // Swift
  27. dict.removeValueForKey("DUB")

复制代码

For Loops

The above examples for Arrays and Dictionaries already showed
examples of using a For-In loop to iterate through the items in those
collections. Here are some additional methods of iterating using a For
Loop.

  1. // Iterate from 1 through 5
  2. // C#
  3. // using increment
  4. for(var i = 1; i <= 5; i++) {
  5. // do something with i
  6. }
  7. // Swift
  8. // using range
  9. for i in 1...5 {
  10. // do something with i
  11. }
  12. // using increment
  13. for var i = 0; i <= 5; ++i {
  14. // do something with i
  15. }

复制代码

The range example of Swift is rather interesting in the method
of shorthand it uses for it‘s definition.

Conditional Statements

Both languages support If...Then conditional statements. Swift
is a little different that it doesn‘t require parenthesis around the match
conditions.

  1. // If Then Else Conditional Statement
  2. // C#
  3. if (i > 6) {
  4. // do something
  5. } else if (i > 3 && i <= 6) {
  6. // do something
  7. } else {
  8. // do something
  9. }
  10. // Swift
  11. if i > 6 {
  12. // do something
  13. } else if i > 3 && i <= 6 {
  14. // do something
  15. } else {
  16. // do something
  17. }

复制代码

Switch Statement

Both languages support Switch statements.

  1. // Switch statement
  2. // C#
  3. var word = "A";
  4. switch(word) {
  5. case "A":
  6. // do something
  7. break;
  8. case "B":
  9. // do something
  10. break;
  11. default:
  12. // do something
  13. break;
  14. }
  15. // Swift
  16. var word = "A"
  17. switch word {
  18. case "A":
  19. // do something
  20. case "B":
  21. // do something
  22. default:
  23. // do something
  24. }

复制代码

Switch statements are rather similar in both languages except
that in Swift case statements don‘t automatically pass on to the next like in
C#. As a result C# requires the use of the break keywords to exit the Switch
statement, unless you want to fall through to the next case. While in Swift you
must use the "fallthrough" keyword to tell it to pass on through to the next
case statement. More information on this can be found in the Swift
documentation.

An additional feature that Swift supports with Switch statements
is ranges within the Case statements. This is something that C# does not
support.

  1. // Switch Case Ranges
  2. // C#
  3. switch (i) {
  4. case 1:
  5. case 2:
  6. case 3:
  7. // do something
  8. break;
  9. case 4:
  10. // do something
  11. break;
  12. default:
  13. // do something
  14. break;
  15. }
  16. // Swift
  17. switch i {
  18. case 1...3:
  19. // do something
  20. case 4:
  21. // do something
  22. default:
  23. // do something
  24. }

复制代码

Functions

While Functions are a much bigger comparison to be made,
here‘s a basic example:

  1. // Function with Parameter and Return Value
  2. // C#
  3. string sayHello(string name) {
  4. // do something
  5. }
  6. // Swift
  7. func sayHello(name: String) -> String {
  8. // do something
  9. }

复制代码

The post Basic Comparison of Functions in C# and Swift goes into
much more depth on Functions; as that is a much bigger comparison that could fit
into this post.

Conclusion

This concludes my basic comparison of C# and Apple Swift
programming languages. The two languages are rather similar in many respects; at
least in what I‘ve compared thus far. More language feature comparisons will
have to wait for future posts.

One of the bigger differences that‘s worth pointing out
explicitly is the difference in how each language handles Array‘s. Arrays in
Swift are extremely similar to the List<> class in C#; which is what most
developers use today in C# instead of arrays anyway (unless performance requires
it.)

You can find more information about the Swift programming
language on Apple‘s site at the following links:

https://developer.apple.com/swift/

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/

时间: 2024-08-13 21:30:01

Swift和C#的基本语法对比的相关文章

2.Swift的playground与OC语法对比

1.playground 1.1 简介 在2014年的WWDC大会上,苹果公司正式公布了Swift——一款面向苹果移动设备软件开发工作的全新编程语言.为了配合新语言的诞生,Xcode 6新增了一项名为Playgrounds的功能——这其实是一套交互工作区,开发人员可以在此编写Swift代码并在无需将其运行在设备或者模拟器中的前 提下获取实时运行效果反馈.这对于Xcode来说无疑是一种很好的补充,现在各位可以在将自己的代码成果正式添加到主代码库内之前,以实验性方式快速便捷 地掌握地实时运行效果 1

从Android到iOS开发——(1)、objective-c与java语法对比

从Android到iOS开发--(1).objective-c与java语法 对比 从6月开始,因为有iOS项目要做,就开始了iOS开发之旅,截止今天,已经做了2个项目,给我的感受是iOS开发整体要比Android简单,但是开发细节上两者却又同样的烦恼.那么要想开发iOS,那么到底选择objective-c or swift,我的建议是前者,后者可以在swift2.0和xcode7 以后大家去学习会比较好些.好了,不废话了,下面咱们来看下objective-c和java语法上的比较,希望能让ja

【语言对比】控制流语法对比

在了解各个语言支持的数据类型之后,接下来要对比的,就是各种语言支持的各种控制结构. 1.选择控制结构 Python的选择语句if/elif/else : 语法含义上和C++.JAVA语言没有区别,只是在语法格式上有所不同.首先,采用elif作为else if的缩写(其他的脚本语言中也大部分是这样),其次,对于每一个选择条件,有冒号作为截止,其他的语言都是采用{}来标识代码段的.Python中是没有类似于JAVA和C++中的switch语句的,至于原因,是因为python中有一个很好的方式能够代替

【Swfit】Swift与OC两种语法写单例的区别

Swift与OC两种语法写单例的区别 例如写一个NetworkTools的单例 (1)OC写单例 1 + (instancetype)sharedNetworkTools { 2 static id instance; 3 4 static dispatch_once_t onceToken; 5 6 dispatch_once(&onceToken, ^{ 7 instance = [[self alloc] init]; 8 //这里可以做一些初始化 9 }); 10 11 return i

Java, C#, Swift语法对比速查表

  Java 8 C# 6 Swift 变量 类型 变量名; 类型 变量名; var 变量名 : 类型; 变量(类型推断) N/A var 变量名=初值; var 变量名=初值; 常量 final 类型 常量名=初值; readonly 类型 常量名=初值; let 常量名 : 类型=初值; 基本类型 int short long byte double float boolean char int short long byte double float bool char Int32 Int

Swift与C#的基础语法比较

背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对比来加深认识. 所以做了一个简单的比较列表. 下面是基础语法的比较: Swift C#(4.0以上) 常量定义: let name=”cyq.data” Const name=”cyq.data”; 变量定义: 指定类型: var name=”cyq.data” var name:String=”c

swift入门学习-与Objective-c的对比

class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // swift 中 () 代替 oc 中的 alloc / init let v = UIView(frame: CGRect(x: 0, y: 20, width: 100, height: 100)) // [UIColor redColor]; v.backgroundColor = UIColor.redC

MongoDB命令及SQL语法对比

mongodb与mysql命令对比 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(collection).文档对象(document)三个层次组成.MongoDB对于关系型数据库里的表,但是集合中没有列.行和关系概念,这体现了模式自由的特点. MySQL MongoDB 说明 mysqld mongod 服务器守护进程 mysql mongo 客户端工具 mysqldump mongo

Swift基础学习(一)基本语法

Swift 简介(赞美一番,收集了多篇 关于Swift 学习教程的语言简介一直以为英语和汉语混写的时候只是英语字母结尾的地方打空格,原来是英语字母的开头和结尾都要加一个空格,英语字母后面是标点符号的时候不加空格): Swift 是一种新的编程语言,用于编写 iOS,macOS,watchOS 和 tvOS 的应用程序.Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制.Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣.Swif