第二个Swift小练习
写这篇博客的目的:总结内容,记录学习;
【说明】:
1.该系列Swift项目联系均来自gitHub上一位大牛的贡献:https://github.com/allenwong/30DaysofSwift;
2.如果任何不对或者不适合的地方请多多指教。
【小练习的功能】
1.点击changeFont按钮会更改文字的字体
2.使用控件:UItableView、UIButton
3.界面展示:
【知识点】
1.as!的作用
【说明】这是一段设置导航栏title颜色和字体大小的代码。其中用到了as?,在这里的作用是类型转换,将dict这种类型转换为 [String : Any]类型。
2.注册系统cell
第一种方法:
tableView?.register(UITableViewCell.self, forCellReuseIdentifier: "systemCell")
第二种方法:
tableView?.register( UITableViewCell.classForCoder(), forCellReuseIdentifier: "systemCell")
【说明】
OC中注册系统cell:
[_tableView registerNib:[UINib nibWithNibName:NSStringFromClass([UITableViewCell class]) bundle:nil] forCellReuseIdentifier:@"UITableViewCell"];
类比一下你就会明白UITableViewCell.self
是指UItableView这个类。而classForCoder()
的声明是这样的var classForCoder: AnyClass { get }
,可以获取到任何类。
3.在extension中写协议方法
这个延展是独立于类代码之外的。你想想OC中很多协议方法都在同一个类中是不是很乱,Swift已经都将它放在一起了,这样会代码会看着舒服些。另外你按照OC的传统写法也是可以的啊。但是Swift推荐用extension。
4.cell中不用判断是否为nil
参考3的图片,可以看到,因为当我写上` if cell == nil {
cell = UITableViewCell.init(style: UITableViewCellStyle.default, reuseIdentifier: "systemCell")
}
`的时候,会直接报出警告“UITableViewCell” to nil always returns false
5.我是用一个布尔值判断是否更新UI和一个int类型记录点击次数,从而设定布尔值。
6.项目链接:
【补充】
1.获取系统字体的方法
override func viewDidLoad() {
super.viewDidLoad()
// 获取当前字体信息
let currentFont = UIFont.systemFont(ofSize: UIFont.systemFontSize)
print(currentFont)
// 获取系统所有字体
let familyNameArray = NSMutableArray()
let familyNameAll = UIFont.familyNames
for family in familyNameAll{
let fonts = UIFont.fontNames(forFamilyName: family)
for font in fonts {
familyNameArray.add(font)
}
}
print(familyNameArray)
}
打印结果:
<UICTFont: 0x7fb9b650bed0> font-family: ".SFUIText"; font-weight: normal; font-style: normal; font-size: 14.00pt
(
"Copperplate-Light",
Copperplate,
"Copperplate-Bold",
"KohinoorTelugu-Regular",
"KohinoorTelugu-Medium",
"KohinoorTelugu-Light",
Thonburi,
"Thonburi-Bold",
"Thonburi-Light",
"CourierNewPS-BoldMT",
"CourierNewPS-ItalicMT",
CourierNewPSMT,
"CourierNewPS-BoldItalicMT",
"GillSans-Italic",
"GillSans-Bold",
"GillSans-BoldItalic",
"GillSans-LightItalic",
GillSans,
"GillSans-Light",
"GillSans-SemiBold",
"GillSans-SemiBoldItalic",
"GillSans-UltraBold",
"AppleSDGothicNeo-Bold",
"AppleSDGothicNeo-UltraLight",
"AppleSDGothicNeo-Thin",
"AppleSDGothicNeo-Regular",
"AppleSDGothicNeo-Light",
"AppleSDGothicNeo-Medium",
"AppleSDGothicNeo-SemiBold",
"MarkerFelt-Thin",
"MarkerFelt-Wide",
"AvenirNextCondensed-BoldItalic",
"AvenirNextCondensed-Heavy",
"AvenirNextCondensed-Medium",
"AvenirNextCondensed-Regular",
"AvenirNextCondensed-HeavyItalic",
"AvenirNextCondensed-MediumItalic",
"AvenirNextCondensed-Italic",
"AvenirNextCondensed-UltraLightItalic",
"AvenirNextCondensed-UltraLight",
"AvenirNextCondensed-DemiBold",
"AvenirNextCondensed-Bold",
"AvenirNextCondensed-DemiBoldItalic",
TamilSangamMN,
"TamilSangamMN-Bold",
"HelveticaNeue-Italic",
"HelveticaNeue-Bold",
"HelveticaNeue-UltraLight",
"HelveticaNeue-CondensedBlack",
"HelveticaNeue-BoldItalic",
"HelveticaNeue-CondensedBold",
"HelveticaNeue-Medium",
"HelveticaNeue-Light",
"HelveticaNeue-Thin",
"HelveticaNeue-ThinItalic",
"HelveticaNeue-LightItalic",
"HelveticaNeue-UltraLightItalic",
"HelveticaNeue-MediumItalic",
HelveticaNeue,
"GurmukhiMN-Bold",
GurmukhiMN,
TimesNewRomanPSMT,
"TimesNewRomanPS-BoldItalicMT",
"TimesNewRomanPS-ItalicMT",
"TimesNewRomanPS-BoldMT",
"Georgia-BoldItalic",
Georgia,
"Georgia-Italic",
"Georgia-Bold",
AppleColorEmoji,
ArialRoundedMTBold,
"Kailasa-Bold",
Kailasa,
"KohinoorDevanagari-Light",
"KohinoorDevanagari-Regular",
"KohinoorDevanagari-Semibold",
"KohinoorBangla-Semibold",
"KohinoorBangla-Regular",
"KohinoorBangla-Light",
"ChalkboardSE-Bold",
"ChalkboardSE-Light",
"ChalkboardSE-Regular",
"SinhalaSangamMN-Bold",
SinhalaSangamMN,
"PingFangTC-Medium",
"PingFangTC-Regular",
"PingFangTC-Light",
"PingFangTC-Ultralight",
"PingFangTC-Semibold",
"PingFangTC-Thin",
"GujaratiSangamMN-Bold",
GujaratiSangamMN,
DamascusLight,
DamascusBold,
DamascusSemiBold,
DamascusMedium,
Damascus,
"Noteworthy-Light",
"Noteworthy-Bold",
GeezaPro,
"GeezaPro-Bold",
"Avenir-Medium",
"Avenir-HeavyOblique",
"Avenir-Book",
"Avenir-Light",
"Avenir-Roman",
"Avenir-BookOblique",
"Avenir-MediumOblique",
"Avenir-Black",
"Avenir-BlackOblique",
"Avenir-Heavy",
"Avenir-LightOblique",
"Avenir-Oblique",
AcademyEngravedLetPlain,
DiwanMishafi,
"Futura-CondensedMedium",
"Futura-CondensedExtraBold",
"Futura-Medium",
"Futura-MediumItalic",
"Futura-Bold",
Farah,
KannadaSangamMN,
"KannadaSangamMN-Bold",
"ArialHebrew-Bold",
"ArialHebrew-Light",
ArialHebrew,
ArialMT,
"Arial-BoldItalicMT",
"Arial-BoldMT",
"Arial-ItalicMT",
Gaspar,
PartyLetPlain,
Chalkduster,
"HoeflerText-Italic",
"HoeflerText-Regular",
"HoeflerText-Black",
"HoeflerText-BlackItalic",
"Optima-Regular",
"Optima-ExtraBlack",
"Optima-BoldItalic",
"Optima-Italic",
"Optima-Bold",
"Palatino-Bold",
"Palatino-Roman",
"Palatino-BoldItalic",
"Palatino-Italic",
LaoSangamMN,
"MalayalamSangamMN-Bold",
MalayalamSangamMN,
"AlNile-Bold",
AlNile,
"BradleyHandITCTT-Bold",
"PingFangHK-Ultralight",
"PingFangHK-Semibold",
"PingFangHK-Thin",
"PingFangHK-Light",
"PingFangHK-Regular",
"PingFangHK-Medium",
"Trebuchet-BoldItalic",
TrebuchetMS,
"TrebuchetMS-Bold",
"TrebuchetMS-Italic",
"Helvetica-Bold",
Helvetica,
"Helvetica-LightOblique",
"Helvetica-Oblique",
"Helvetica-BoldOblique",
"Helvetica-Light",
"Courier-BoldOblique",
Courier,
"Courier-Bold",
"Courier-Oblique",
"Cochin-Bold",
Cochin,
"Cochin-Italic",
"Cochin-BoldItalic",
"HiraMinProN-W6",
"HiraMinProN-W3",
DevanagariSangamMN,
"DevanagariSangamMN-Bold",
OriyaSangamMN,
"OriyaSangamMN-Bold",
"SnellRoundhand-Bold",
SnellRoundhand,
"SnellRoundhand-Black",
ZapfDingbatsITC,
"BodoniSvtyTwoITCTT-Bold",
"BodoniSvtyTwoITCTT-Book",
"BodoniSvtyTwoITCTT-BookIta",
"Verdana-Italic",
"Verdana-BoldItalic",
Verdana,
"Verdana-Bold",
"AmericanTypewriter-CondensedLight",
AmericanTypewriter,
"AmericanTypewriter-CondensedBold",
"AmericanTypewriter-Light",
"AmericanTypewriter-Semibold",
"AmericanTypewriter-Bold",
"AmericanTypewriter-Condensed",
"AvenirNext-UltraLight",
"AvenirNext-UltraLightItalic",
"AvenirNext-Bold",
"AvenirNext-BoldItalic",
"AvenirNext-DemiBold",
"AvenirNext-DemiBoldItalic",
"AvenirNext-Medium",
"AvenirNext-HeavyItalic",
"AvenirNext-Heavy",
"AvenirNext-Italic",
"AvenirNext-Regular",
"AvenirNext-MediumItalic",
"Baskerville-Italic",
"Baskerville-SemiBold",
"Baskerville-BoldItalic",
"Baskerville-SemiBoldItalic",
"Baskerville-Bold",
Baskerville,
KhmerSangamMN,
"Didot-Italic",
"Didot-Bold",
Didot,
SavoyeLetPlain,
BodoniOrnamentsITCTT,
Symbol,
"Menlo-Italic",
"Menlo-Bold",
"Menlo-Regular",
"Menlo-BoldItalic",
"BodoniSvtyTwoSCITCTT-Book",
Papyrus,
"Papyrus-Condensed",
"HiraginoSans-W3",
"HiraginoSans-W6",
"PingFangSC-Ultralight",
"PingFangSC-Regular",
"PingFangSC-Semibold",
"PingFangSC-Thin",
"PingFangSC-Light",
"PingFangSC-Medium",
"MyanmarSangamMN-Bold",
MyanmarSangamMN,
"EuphemiaUCAS-Italic",
EuphemiaUCAS,
"EuphemiaUCAS-Bold",
Zapfino,
"BodoniSvtyTwoOSITCTT-Book",
"BodoniSvtyTwoOSITCTT-Bold",
"BodoniSvtyTwoOSITCTT-BookIt"
)
2.获取系统字体方法
->将你的字体文件(以.otf或者.ttf为后缀的文件)拖入到项目中
->在info.plist文件中添加“Fonts provided by application”字段,并将你的字体文件名称完整写出来。
->在【Target-BuildPhase-Copy Bundle Resources】中看看是否有你刚刚添加的字体文件名称,有就说明添加好了,没有你自己再手动加一下。接下来你就可以直接根据字体名字在代码中使用了。
3.xib使用字体
选择custom之后选择你想要的字体就可以了
Swift初学者,如果有不合理或者不正确的地方,还请指正。共同进步。