CGSize宽度和高度打印为零

时间:2016-07-12 04:54:39

标签: swift

我想知道图像的宽度和高度,但CGSize总是返回0.

let img : UIImage = UIImage.init(named: "icon_ear")!
NSLog("img w : %d, h : %d", img.size.width, img.size.height)
//img w : 0, h : 0 `      

let cs = CGSize(width: 100, height: 100)
NSLog("cs w : %d, h : %d", cs.width, cs.height)
//cs w : 0, h : 0

有什么问题?

2 个答案:

答案 0 :(得分:3)

widthheight浮点值(CGFloat), 相应的打印格式为%f

NSLog("img w : %f, h : %f", img.size.width, img.size.height)

%d格式适用于整数。完整的字符串列表 格式说明符可以在https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html找到。

Clang C编译器会警告这个问题:

CGSize cs = CGSizeMake(100, 100);
NSLog(@"cs w : %d, h : %d", cs.width, cs.height);
// warning: format specifies type 'int' but the argument has type 'CGFloat' (aka 'double') [-Wformat]

但是Swift编译器还没有检测到这个问题。 在Swift中,字符串插值(如评论中已提到的)是一个 替代方法:

let cs = CGSize(width: 100, height: 100)
NSLog("cs w : \(cs.width), h : \(cs.height)")

但对表示的控制较少。 与NSLog()一起使用时,也必须小心 不插入可能包含格式说明符的字符串。

答案 1 :(得分:1)

CGSize的宽度和高度是浮点而不是整数。 只需将格式说明符从%d更改为%f。

NSLog("cs w : %f, h : %f", cs.width, cs.height)