ios开发学习----swift学习之(一)基础数据类型

http://letsswift.com/2014/06/swift_overview/


常量和变量的声明

与c语言不同的是,常量和变量在使用前都需要声明,在Swift中使用let关键词来声明一个常量,var关键词声明一个变量。同样,常量的值是不能够被二次修改的。

可以在一行中声明多个变量或常量,用,号分隔:

var x = 0.0, y = 0.0, z = 0.0

Swift中可以使用几乎任何字符来作为常量和变量名,包括Unicode,比如:

let π = 3.14159
let 你好 = "你好世界"
let = "dogcow"

但是名称中不能含有数学符号,箭头,无效的Unicode,横线-和制表符,且不能以数字开头,尽管数字可以包含在名称里。一旦完成了声明,就不能再次声明相同名称的变量或常量,或者改变它的类型。变量和常量也不能互换。


类型注解

使用:号加空格加类型名在变量或常量名之后就可以完成类型注解。下面的例子就是声明了一个变量叫welcomeMessage,注解类型为字符串String:

var welcomeMessage: String

分号 “:” 在这的作用就像是在说:…是…类型的,因此上述代码可以理解为:

声明一个叫welcomeMessage的变量,它的类型是String

实际编程中很少需要使用类型注解,定义常量或者变量的时候Swift已经根据初始化的值确定了类型信息。Swift几乎都可以隐式的确定变量或常量的类型,如果初始化值没有被给出,所以更好的办法是指定welcomeMessage变量的类型而不是让Swift隐式推导类型。

输出常量和变量

Swift使用println来输出变量或者常量:

println是一个全局函数,用来输出一个值,最后输出一个换行。在Xcode中,println输出在控制台中。print函数也类似,只不过最后不会输出换行。

println函数一般输出一个字符串

println("This is a string")
// prints "This is a string"

println函数还可以格式化输出一些日志信息,就像是Cocoa中NSLog函数的行为一样,可以包括一些常量和变量本身。Swift在字符串中插入变量名作为占位符,使用反斜杠()来提示Swift替换变量/常量名为其实际的值,如:

println(“The current value of friendlyWelcome is \(friendlyWelcome)”) // prints “The current value of friendlyWelcome is Bonjour!”

整数

整数就是像42和-23这样不带分数的数字,包括有符号(正数,负数,0)和无符号(正数,0)。Swift提供了8、16、32和64位的数字形式,和C语言类似,可以使用8位的无符号整数UInt8,或者32位的整数Int32.像其他Swift类型一样,这些类型名的首字母大写。

整数边界

使用min或max值来获取该类型的最大最小值,如:

let minValue = UInt8.min // minValue is equal to 0, and is of type UInt8
let maxValue = UInt8.max // maxValue is equal to 255, and is of type UInt8
  • Double类型能表示64位的有符号浮点数。当需要表的数字非常大或者精度要求非常高的时候可以使用Double类型。
  • Float类型能表示32为的有符号浮点数。当需要表达的数字不需要64位精度的时候可以使用Float类型。

    注 Double 至少有15位小数,Float至少有6位小数。合适的浮点数小数位数取决于你代码里需要处理的浮点数范围。

类型推导使 编译器 在编译的时候通过你提供的初始化值自动推导出特定的表达式的类型。

例如,如果您指定42到一个新的常数变量,而不用说它是什么类型,Swift推断出你想要的常量是一个整数,因为你已经初始化它为一个整数

let meaningOfLife= 42
// meaningOfLife is inferred to be of typeInt

同样,如果你不指定浮点值的类型,Swift推断出你想要创建一个Double:

let pi = 3.14159
// pi is inferred to be of type Double

Swift总是选择Double(而非Float)当它需要浮点数类型时。如果你在一个表达式中把整数和浮点数相加,会推导一个Double类型:

let anotherPi= 3 + 0.14159
// anotherPi is also inferred to be of typeDouble

整型常量可以写成:

  • 一个十进制数,不带前缀
  • 一个二进制数,用前缀0b
  • 一个八进制数,用0o前缀
  • 一个十六进制数,以0x前缀

所有如下用这些整型常量都可以来表达十进制值的17:

let decimalInteger= 17
let binaryInteger = 0b10001 // 17 in binary notation
let octalInteger = 0o21 // 17 in octal notation
let hexadecimalInteger = 0x11 // 17 inhexadecimal notation

浮点可以是十进制(不带前缀)或十六进制(以0x前缀),小数点的两侧必须始终有一个十进制数(或十六进制数)。他们也可以有一个可选的指数,由一个大写或小写e表示十进制浮点数表示,或大写/小写p表示十六进制浮点数

带指数exp的十进制数,实际值等于基数乘以10的exp次方,如:

  • 1.25e2表示1.25×102,或者125.0.
  • 1.25e-2表示1.25×10-2,或者0.0125.

带指数exp的十六进制数,实际值等于基部数乘以2的exp次方,如:

  • 0xFp2表示15×22,或者60.0.
  • 0xFp-2表示15×2-2,或者3.75.

所有如下这些浮点常量都表示十进制的12.1875:

let decimalDouble= 12.1875
let exponentDouble= 1.21875e1
let hexadecimalDouble= 0xC.3p0

数字值可以包含额外的格式,使它们更容易阅读。整数和浮点数都可以被额外的零填充,并且可以包含下划线,以增加可读性。以上格式都不影响变量的值:

let paddedDouble= 000123.456
let oneMillion= 1_000_000
let justOverOneMillion= 1_000_000.000_000_1
类型之间的转化必须显式声明:

let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne= twoThousand + UInt16(one)
let three = 3
let pointOneFourOneFiveNine= 0.14159
let pi = Double(three) +pointOneFourOneFiveNine
// pi equals 3.14159, and is inferred to beof typde Double

类型别名

类型别名为现有类型定义的可替代名称。你可以使用typealias关键字定义类型别名。

typealias AudioSample = UInt16

一旦你定义了一个类型别名,你可以在任何可能使用原来的名称地方使用别名:

var maxAmplitudeFound= AudioSample.min
// maxAmplitudeFound is now 0

这里,AudioSample被定义为一个UInt16的别名。因为它是一个别名,调用AudioSample.min实际上是调用UInt16.min,从而给maxAmplitudeFound变量赋初始值0。














http://www.cnblogs.com/wuxian/category/587713.html



深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值