2015-06-29 11:05:05 reylen 阅读数 18594

WKWebView进度及title

WKWebView 的estimatedProgress和title 都是KVO模式,所以可以添加监控:

    [webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:NULL];
    [webView addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:NULL];

监控的实现方法:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

    if ([keyPath isEqualToString:@"estimatedProgress"]) {

        if (object == webView) {
            [self.progressView setAlpha:1.0f];
            [self.progressView setProgress:self.currentSubView.webView.estimatedProgress animated:YES];

            if(self.currentSubView.webView.estimatedProgress >= 1.0f) {

                [UIView animateWithDuration:0.3 delay:0.3 options:UIViewAnimationOptionCurveEaseOut animations:^{
                    [self.progressView setAlpha:0.0f];
                } completion:^(BOOL finished) {
                    [self.progressView setProgress:0.0f animated:NO];
                }];

            }
        }
        else
        {
            [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
        }

    }
    else if ([keyPath isEqualToString:@"title"])
    {
        if (object == self.webView) {
            self.title = self.webView.title;

        }
        else
        {
            [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];

        }
    }
    else {

        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}

这里的进度增加了动画,类似safari的进度效果

需要注意的是销毁的时候一定要移除监控

        [webView removeObserver:self forKeyPath:@"estimatedProgress"];
        [webView removeObserver:self forKeyPath:@"title"];
2015-05-22 04:48:17 liangliang2727 阅读数 2671

        CGPath图形路径是对一系列形状或线的数学描述。 CGPathRef定义了一个不可变的图形路径的类型,CGMutablePathRef定义了一个可变的图形的路径的类型。无论是CGPathRef或者CGMutablePathRef,都不能定义绘制路径的函数。要绘制Quartz路径需要使用图形上下文,通过调用CGContextAddPath将路径添加到图形上下文中去,然后调用的图形上下文的绘图功能,可以参考CGContext类的相关内容。

        路径定了一个或多个形状,或是子路径。一个子路径可由直线,曲线,或者同由两者构成。它可以是开放的,也可以是合的。一个子路径可以是简单的形状,如线、矩形、星形;也可以是复的形状,如山脉的廓或者是涂

        要追加新的子路径到一个可变的路径,你的应用程序通常可以调用CGPathMoveToPoint设置子路径的出发点,随后进行了一系列的CGPathAdd*函数调用来继续绘制路径添加到子路径。你的应用程序可以调用CGPathCloseSubpath来明确关闭子路径绘制。

        通常,绘制流程是:

1.创建路径对象:CGPathRef/CGMutablePathRef;

2.设置路径或图形;

3.建立图形上下文;

4.将路径添加到图形上下文中去;

5.绘制;

6.释放路径。


- (void)drawTwoLines
{
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathMoveToPoint(path, NULL, screenRect.origin.x, screenRect.origin.y);
    CGPathAddLineToPoint(path, NULL, screenRect.size.width, screenRect.size.height);
    CGPathMoveToPoint(path, NULL, screenRect.size.width, screenRect.origin.y);
    CGPathAddLineToPoint(path, NULL, screenRect.origin.x, screenRect.size.height);
    
    
    CGPathMoveToPoint(path,NULL,75,10);
    CGPathAddLineToPoint(path,NULL,10,150);
    CGPathAddLineToPoint(path,NULL,160,150);
    
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextAddPath(context, path);//将路径添加到上下文中去
    CGContextSetLineWidth(context, 1.0f);
    [[UIColor blueColor] setStroke];
    CGContextDrawPath(context, kCGPathStroke);      //第二个参数为画路径的样式,这里为描线,也可以有填充或者既描线也填充   绘制
    
    CGPathRelease(path);//释放路径
}



数据类型:

struct CGPathElement { CGPathElementType type; CGPoint * points; }; typedef struct CGPathElement CGPathElement;
        一种数据结构,提供了有关一个路径元素的信息。

typedef const struct CGPath *CGPathRef;
        不可变路径对象。

typedef struct CGPath *CGMutablePathRef;
        可变路径对象。

常量:

enum CGPathDrawingMode {
   kCGPathFill,
   kCGPathEOFill,
   kCGPathStroke,
   kCGPathFillStroke,
   kCGPathEOFillStroke 
};
typedef enum CGPathDrawingMode CGPathDrawingMode;

        填充方式(即绘制模式)。

        kCGPathFill:只有填充(非零缠绕数填充),不绘制边框

        kCGPathEOFill:奇偶规则填充(多条路径交叉时,奇数交叉填充,偶交叉不填充)

        kCGPathStroke:只有边框

        kCGPathFillStroke:既有边框又有填充

        kCGPathEOFillStroke:奇偶填充并绘制边框

enum CGPathElementType {
   kCGPathElementMoveToPoint,
   kCGPathElementAddLineToPoint,
   kCGPathElementAddQuadCurveToPoint,
   kCGPathElementAddCurveToPoint,
   kCGPathElementCloseSubpath 
};
typedef enum CGPathElementType CGPathElementType;
        路径元素类型。

enum CGLineCap {
   kCGLineCapButt,
   kCGLineCapRound,
   kCGLineCapSquare 
};
typedef enum CGLineCap CGLineCap;
        线边帽的三种类型。

enum CGLineJoin {
   kCGLineJoinMiter,
   kCGLineJoinRound,
   kCGLineJoinBevel 
};
typedef enum CGLineJoin CGLineJoin;
        线段拐角出设置的三种类型,kCGLineJoinMiter(直角), kCGLineJoinRound(圆角), kCGLineJoinBevel(平角)。

创建和管理路径:

CGMutablePathRef CGPathCreateMutable ( void );
        创建一个可变路径,你需要负责释放该对象。

CGPathRef CGPathCreateWithEllipseInRect ( CGRect rect, const CGAffineTransform *transform );

        创建一个不可变的椭圆路径。

CGPathRef CGPathCreateWithRect ( CGRect rect, const CGAffineTransform *transform );
        创建一个不可变的路径。

CGPathRef CGPathCreateWithRoundedRect ( CGRect rect, CGFloat cornerWidth, CGFloat cornerHeight, const CGAffineTransform *transform );
        创建一个不可变的圆角矩形。

CGPathRef CGPathCreateCopy ( CGPathRef path );
        创建一个不可变的可以拷贝的路径。

CGPathRef CGPathCreateCopyByTransformingPath ( CGPathRef path, const CGAffineTransform *transform );
        由一个转换矩阵变换一个图形路径创建一个不可变的副本。
CGPathRef CGPathCreateCopyByDashingPath ( CGPathRef path, const CGAffineTransform *transform, CGFloat phase, const CGFloat *lengths, size_t count );
        创建一个可复制的虚线路径。

CGPathRef CGPathCreateCopyByStrokingPath ( CGPathRef path, const CGAffineTransform *transform, CGFloat lineWidth, CGLineCap lineCap, CGLineJoin lineJoin, CGFloat miterLimit );
        创建另一个路径的副本。
CGMutablePathRef CGPathCreateMutableCopy ( CGPathRef path );
        创建一个现有的可变路径的副本。

CGMutablePathRef CGPathCreateMutableCopyByTransformingPath ( CGPathRef path, const CGAffineTransform *transform );
       创建一个由一个转换阵变换一个形路径的可副本。

void CGPathRelease ( CGPathRef path );
        递减路径对象的引用计数。

CGPathRef CGPathRetain ( CGPathRef path );
        增加路径对象的引用计数。

修改Quartz路径:

void CGPathAddArc ( CGMutablePathRef path, const CGAffineTransform *m, CGFloat x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat endAngle, bool clockwise );
        将一个弧加入可变路径中。

void CGPathAddRelativeArc ( CGMutablePathRef path, const CGAffineTransform *matrix, CGFloat x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat delta );
        将一个弧加入可变路径中。

void CGPathAddArcToPoint ( CGMutablePathRef path, const CGAffineTransform *m, CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2, CGFloat radius );
        将一个弧加入可变路径中。

void CGPathAddCurveToPoint ( CGMutablePathRef path, const CGAffineTransform *m, CGFloat cp1x, CGFloat cp1y, CGFloat cp2x, CGFloat cp2y, CGFloat x, CGFloat y );
        将一个贝塞尔曲线加入到可变路径中去。

void CGPathAddLines ( CGMutablePathRef path, const CGAffineTransform *m, const CGPoint points[], size_t count );
        根据数组里的点,连续绘制路径。

void CGPathAddLineToPoint ( CGMutablePathRef path, const CGAffineTransform *m, CGFloat x, CGFloat y );
        绘制直线路径。

void CGPathAddPath ( CGMutablePathRef path1, const CGAffineTransform *m, CGPathRef path2 );
         为可变路径添加路径。

void CGPathAddQuadCurveToPoint ( CGMutablePathRef path, const CGAffineTransform *m, CGFloat cpx, CGFloat cpy, CGFloat x, CGFloat y );
        为一个可变路径添加一个二次贝赛尔曲线。

void CGPathAddRect ( CGMutablePathRef path, const CGAffineTransform *m, CGRect rect );
        绘制矩形。
void CGPathAddRects ( CGMutablePathRef path, const CGAffineTransform *m, const CGRect rects[], size_t count );
        根据数组里的数据绘制矩形组。

void CGPathAddRoundedRect ( CGMutablePathRef path, const CGAffineTransform *transform, CGRect rect, CGFloat cornerWidth, CGFloat cornerHeight );
        绘制圆角矩形。

void CGPathApply ( CGPathRef path, void *info, CGPathApplierFunction function );
        对于路径中的指定元素,调用指定函数。

void CGPathMoveToPoint ( CGMutablePathRef path, const CGAffineTransform *m, CGFloat x, CGFloat y );
        在指定位置绘制起点。

void CGPathCloseSubpath ( CGMutablePathRef path );
        关闭并完成一个可变路径中的子路经。

void CGPathAddEllipseInRect ( CGMutablePathRef path, const CGAffineTransform *m, CGRect rect );
        添加一个适合的椭圆在矩形的内部。


获取有关Quartz路径:

bool CGPathEqualToPath ( CGPathRef path1, CGPathRef path2 );
        判断两个路径是否相等。

CGRect CGPathGetBoundingBox ( CGPathRef path );
        返回一个包含所有点在图形路径的边框

CGRect CGPathGetPathBoundingBox ( CGPathRef path );
        返回图形路径的边界框。

CGPoint CGPathGetCurrentPoint ( CGPathRef path );
        返回路径中的点。

CFTypeID CGPathGetTypeID ( void );
        返回Quartz图形路径的核心基础类型的标识符。

bool CGPathIsEmpty ( CGPathRef path );
         判断路径是否为空。

bool CGPathIsRect ( CGPathRef path, CGRect *rect );
        路径是否是一个矩形。

bool CGPathContainsPoint ( CGPathRef path, const CGAffineTransform *m, CGPoint point, bool eoFill );
        检测一个点是否在路径中。


其他回调:

typedef void (*CGPathApplierFunction) ( void *info, const CGPathElement *element );
        定义一个回调函数可以查看在图形路径中的元素。





2016-11-23 16:24:11 wanglei0918 阅读数 3426

点击tableview后要获取当前点击的cell

1.

NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
 UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
 cell.textLabel.text= @"abc";

获取cell后可对指定的cell操作

2016-08-05 09:50:00 aaa1231722 阅读数 2

李洪强iOS开发Swift篇—03_字符串和数据类型

一、字符串

字符串是String类型的数据,用双引号""包住文字内容  let website = "http://www.wendingding.com"

1.字符串的常见操作

(1)用加号 + 做字符串拼接

let scheme = "http://"

let path = “www.wendingding.com”

let website = scheme + path

// website的内容是”http://www.wendingding.com”

 

(2)用反斜线 \ 和 小括号 () 做字符串插值(把常量\变量插入到字符串中)

let hand = 2

var age = 20

let str = "我今年\(age)岁了,有\(hand)只手"

// str的内容是"我今年20岁了,有2只手"

注意:swift是类型安全语言,不同的数据类型是不能相加的。(需要强制转换类型)

2.打印输出

Swift提供了2个打印输出函数

println :输出内容后会自动换行

print :对比println,少了个自动换行的功能

 

二、数据类型

1.Swift中常用的数据类型有

Int、Float、Double、Bool、Character、String

Array、Dictionary、元组类型(Tuple)、可选类型(Optional)

注意:数据类型的首字母都是大写的

 

2.指定变量\常量的数据类型

  在常量\变量名后面加上 冒号(:) 和 类型名称

let age: Int = 10

上面代码表示:定义了一个Int类型的常量age,初始值是10

 

提示:一般来说,没有必要明确指定变量\常量的类型。如果在声明常量\变量时赋了初始值,Swift可以自动推断出这个常量\变量的类型

如:let age = 20  Swift会推断出age是Int类型,因为20是个整数

 

三、变量的初始化

Swift严格要求变量在使用之前必须进行初始化

注意:下面的代码是错误的

var a: Int

let c = a + 10 

说明:

第1行代码中:Swift并不会为变量a赋初值,a没有初始化

第2行代码会报错

 

下面的代码是正确的

var a: Int = 20

let c = a + 10

 

四、整数

1.整数的分类

整数分为2种类型

有符号(signed):正、负、零

无符号(unsigned):正、零

 

Swift提供了8、16、32、64位的有符号和无符号整数,比如

UInt8 :8位无符号整型

Int32 :32位有符号整型

Int8、Int16、Int32、Int64、UInt8、UInt16、UInt32、UInt64

 

2.最值

可以通过min和max属性来获取某个类型的最小值和最大值

let minValue = UInt8.min   // UInt8 类型的 min 等于0

let maxValue = UInt8.max  // UInt8 类型的 max 等于255

 

3.Int和UInt

Swift还提供了特殊的有符号整数类型Int和无符号整数类型UInt

说明:Int\UInt的长度和当前系统平台一样

在32位系统平台上,Int和UInt的长度是32位

在64位系统平台上,Int和UInt的长度是64位

Int在32位系统平台的取值范围:-2147483648 ~ 2147483647

 

建议

在定义变量时,别总是在考虑有无符号、数据长度的问题

尽量使用Int,这样可以保证代码的简洁、可复用性

 

4.存储范围

每种数据类型都有各自的存储范围,比如

Int8的存储范围是:–128 ~ 127

UInt8的存储范围是:0 ~ 255

 

如果数值超过了存储范围,编译器会直接报错

注意:下面的语句都会直接报错

let num1: UInt8 = -1

let num2: Int8 = Int8.max + 1

说明:

第1行代码报错原因: UInt8不能存储负数

第2行代码报错原因: Int8能存储的最大值是Int8.max

 

5.整数的表示形式

整数的4种表示形式

(1)十进制数:没有前缀

  let i1 = 10 // 10

(2)二进制数:以0b为前缀

  let i2 = 0b1010 // 10

(3)八进制数:以0o为前缀

  let i3 = 0o12 // 10

(4)十六进制数:以0x为前缀

  let i4 = 0xA // 10

 

五、浮点数

1.浮点数说明

浮点数,就是小数。Swift提供了两种浮点数类型

Double :64位浮点数,当浮点值非常大或需要非常精确时使用此类型

Float :32位浮点数,当浮点值不需要使用Double的时候使用此类型

 

精确程度

Double :至少15位小数

Float :至少6位小数

 

注意:如果没有明确说明类型,浮点数默认就是Double类型

let num = 0.14 // num是Double类型的常量

 

2.浮点数的表示形式

浮点数可以用 十进制 和 十六进制 2种进制来表示

(1)十进制(没有前缀)

1)没有指数:let d1 = 12.5

2)有指数    :let d2 = 0.125e2  

// 0.125e2 == 0.125 * 10²

MeN ==  M * 10的N次方

 

(2)十六进制(以0x为前缀,且一定要有指数)

let d3 = 0xC.8p0 

// 0xC.8p0 == 0xC.8 * 2º == 12.5 * 1

0xMpN == 0xM * 2的N次方

let d3 = 0xC.8p1 

// 0xC.8p1 == 0xC.8 * 2¹ == 12.5 * 2  == 25.0

 

3.数字格式

数字可以增加额外的格式,使它们更容易阅读

(1)可以增加额外的零 0

let money = 001999 // 1999

let money2 = 001999.000 // 1999.0

(2)可以增加额外的下划线 _ ,以增强可读性

let oneMillion1 = 1_000_000 // 1000000

let oneMillion2 = 100_0000 // 1000000

let overOneMillion = 1_000_000.000_001 // 1000000.000001 

说明:增加了额外的零  0和下划线 _ ,并不会影响原来的数值大小

 

六、类型转换

两个类型不相同的数值,是不能直接进行运算的

示例1:

注意:下面的语句是错误的

let num1: UInt8 = 10;    

let num2: Int = 20;

let sum: Int = num1 + num2 

第3行会报错说明:

报错原因:num1是UInt8类型,num2是类型Int,类型不同,不能相加

解决方案:将num1转为Int类型,就能与num2进行相加

下面的语句是正确的

let sum: Int = Int(num1) + num2

 

示例2:

注意:下面的语句是错误的

let num1 = 3 // num1是Int类型

let num2 = 0.14 // num2是Double类型

let sum = num1 + num2

第3行报错说明:

报错原因:num1是Int类型,num2是类型Double,类型不同,不能相加

解决方案:将num1转为Double类型,就能与num2进行相加

下面的语句是正确的

let sum = Double(num1) + num2

 

注意:

下面的写法是正确的

let sum = 3 + 0.14

3和0.14相加得到结果3.14,等赋值以后,编译器才会自动推断出sum是Double类型

 

七、类型别名

可以使用typealias关键字定义类型的别名,跟C语言的typedef作用类似

  typealias MyInt = Int // 给Int类型起了个别名叫做MyInt

原类型名称能用在什么地方,别名就能用在什么地方

  声明变量\常量类型

  let num: MyInt = 20

获得类型的最值

  let minValue = MyInt.min

类型转换

  let num = MyInt(3.14) // 3

 

 
 

转载于:https://www.cnblogs.com/LiLihongqiang/p/5740067.html

2016-06-13 13:15:00 aaa1231722 阅读数 1

iOS开发Swift篇—(三)字符串和数据类型

一、字符串

字符串是String类型的数据,用双引号""包住文字内容  let website = "http://www.wendingding.com"

1.字符串的常见操作

(1)用加号 + 做字符串拼接

let scheme = "http://"

let path = “www.wendingding.com”

let website = scheme + path

// website的内容是”http://www.wendingding.com”

 

(2)用反斜线 \ 和 小括号 () 做字符串插值(把常量\变量插入到字符串中)

let hand = 2

var age = 20

let str = "我今年\(age)岁了,有\(hand)只手"

// str的内容是"我今年20岁了,有2只手"

注意:swift是类型安全语言,不同的数据类型是不能相加的。(需要强制转换类型)

2.打印输出

Swift提供了2个打印输出函数

println :输出内容后会自动换行

print :对比println,少了个自动换行的功能

 

二、数据类型

1.Swift中常用的数据类型有

Int、Float、Double、Bool、Character、String

Array、Dictionary、元组类型(Tuple)、可选类型(Optional)

注意:数据类型的首字母都是大写的

 

2.指定变量\常量的数据类型

  在常量\变量名后面加上 冒号(:) 和 类型名称

let age: Int = 10

上面代码表示:定义了一个Int类型的常量age,初始值是10

 

提示:一般来说,没有必要明确指定变量\常量的类型。如果在声明常量\变量时赋了初始值,Swift可以自动推断出这个常量\变量的类型

如:let age = 20  Swift会推断出age是Int类型,因为20是个整数

 

三、变量的初始化

Swift严格要求变量在使用之前必须进行初始化

注意:下面的代码是错误的

var a: Int

let c = a + 10 

说明:

第1行代码中:Swift并不会为变量a赋初值,a没有初始化

第2行代码会报错

 

下面的代码是正确的

var a: Int = 20

let c = a + 10

 

四、整数

1.整数的分类

整数分为2种类型

有符号(signed):正、负、零

无符号(unsigned):正、零

 

Swift提供了8、16、32、64位的有符号和无符号整数,比如

UInt8 :8位无符号整型

Int32 :32位有符号整型

Int8、Int16、Int32、Int64、UInt8、UInt16、UInt32、UInt64

 

2.最值

可以通过min和max属性来获取某个类型的最小值和最大值

let minValue = UInt8.min   // UInt8 类型的 min 等于0

let maxValue = UInt8.max  // UInt8 类型的 max 等于255

 

3.Int和UInt

Swift还提供了特殊的有符号整数类型Int和无符号整数类型UInt

说明:Int\UInt的长度和当前系统平台一样

在32位系统平台上,Int和UInt的长度是32位

在64位系统平台上,Int和UInt的长度是64位

Int在32位系统平台的取值范围:-2147483648 ~ 2147483647

 

建议

在定义变量时,别总是在考虑有无符号、数据长度的问题

尽量使用Int,这样可以保证代码的简洁、可复用性

 

4.存储范围

每种数据类型都有各自的存储范围,比如

Int8的存储范围是:–128 ~ 127

UInt8的存储范围是:0 ~ 255

 

如果数值超过了存储范围,编译器会直接报错

注意:下面的语句都会直接报错

let num1: UInt8 = -1

let num2: Int8 = Int8.max + 1

说明:

第1行代码报错原因: UInt8不能存储负数

第2行代码报错原因: Int8能存储的最大值是Int8.max

 

5.整数的表示形式

整数的4种表示形式

(1)十进制数:没有前缀

  let i1 = 10 // 10

(2)二进制数:以0b为前缀

  let i2 = 0b1010 // 10

(3)八进制数:以0o为前缀

  let i3 = 0o12 // 10

(4)十六进制数:以0x为前缀

  let i4 = 0xA // 10

 

五、浮点数

1.浮点数说明

浮点数,就是小数。Swift提供了两种浮点数类型

Double :64位浮点数,当浮点值非常大或需要非常精确时使用此类型

Float :32位浮点数,当浮点值不需要使用Double的时候使用此类型

 

精确程度

Double :至少15位小数

Float :至少6位小数

 

注意:如果没有明确说明类型,浮点数默认就是Double类型

let num = 0.14 // num是Double类型的常量

 

2.浮点数的表示形式

浮点数可以用 十进制 和 十六进制 2种进制来表示

(1)十进制(没有前缀)

1)没有指数:let d1 = 12.5

2)有指数    :let d2 = 0.125e2  

// 0.125e2 == 0.125 * 10²

MeN ==  M * 10的N次方

 

(2)十六进制(以0x为前缀,且一定要有指数)

let d3 = 0xC.8p0 

// 0xC.8p0 == 0xC.8 * 2º == 12.5 * 1

0xMpN == 0xM * 2的N次方

let d3 = 0xC.8p1 

// 0xC.8p1 == 0xC.8 * 2¹ == 12.5 * 2  == 25.0

 

3.数字格式

数字可以增加额外的格式,使它们更容易阅读

(1)可以增加额外的零 0

let money = 001999 // 1999

let money2 = 001999.000 // 1999.0

(2)可以增加额外的下划线 _ ,以增强可读性

let oneMillion1 = 1_000_000 // 1000000

let oneMillion2 = 100_0000 // 1000000

let overOneMillion = 1_000_000.000_001 // 1000000.000001 

说明:增加了额外的零  0和下划线 _ ,并不会影响原来的数值大小

 

六、类型转换

两个类型不相同的数值,是不能直接进行运算的

示例1:

注意:下面的语句是错误的

let num1: UInt8 = 10;    

let num2: Int = 20;

let sum: Int = num1 + num2 

第3行会报错说明:

报错原因:num1是UInt8类型,num2是类型Int,类型不同,不能相加

解决方案:将num1转为Int类型,就能与num2进行相加

下面的语句是正确的

let sum: Int = Int(num1) + num2

 

示例2:

注意:下面的语句是错误的

let num1 = 3 // num1是Int类型

let num2 = 0.14 // num2是Double类型

let sum = num1 + num2

第3行报错说明:

报错原因:num1是Int类型,num2是类型Double,类型不同,不能相加

解决方案:将num1转为Double类型,就能与num2进行相加

下面的语句是正确的

let sum = Double(num1) + num2

 

注意:

下面的写法是正确的

let sum = 3 + 0.14

3和0.14相加得到结果3.14,等赋值以后,编译器才会自动推断出sum是Double类型

 

七、类型别名

可以使用typealias关键字定义类型的别名,跟C语言的typedef作用类似

  typealias MyInt = Int // 给Int类型起了个别名叫做MyInt

原类型名称能用在什么地方,别名就能用在什么地方

  声明变量\常量类型

  let num: MyInt = 20

获得类型的最值

  let minValue = MyInt.min

类型转换

  let num = MyInt(3.14) // 3

 

 
 

转载于:https://www.cnblogs.com/LiLihongqiang/p/5580302.html

没有更多推荐了,返回首页