恭喜同学已掉坑,点个赞,师兄没空,点赞的人太少了,你们自己看着来。答案都在。
第一二三四章
1.目前苹果有两门开发语言可以开发苹果手机上的App 分别是object_c语言和Swift语言
2.Swift语言是苹果公司在哪一年推出的一门新的语言?2014年
3.Swift是一门面向对象的语言还是面向过程的语言?面向对象的语言
4.面向对象的语言有哪些特性?抽象,封装,继承,多态
5.以下为 Swift 中的多行注释声明的是()/* 这是注释 */
6.下列语句中,正确的完成整型变量的声明和赋值的是( )var count:Int = 0
7.在编程中“声明”某个内容是什么意思?第一次为某个内容命名
8.此代码错在哪?
let score = 15
score += 5
score是常量,无法更改
9.下面第二行代码发生“use of unresolved identifier”错误,这是什么意思?()
let playgroundName = “My Playground”
let welcomeMessage = “Come and play in (playGroundName)”
名称需要匹配大小写字母;它应为playgroundName
10.在Swift语言中声明常量用什么关键字?Let
11.在Swift中声明一个变量用什么关键字?______var
12.Swift中如何定义变量和常量?关键字 var 定义变量
关键字 let 定义常量
13.以下运算结果为 true 的是() ( true ) && ( 2 < 5 )
14Swift中有以下哪些运算符?算数运算符逻辑运算符区间运算符三目运算符
15在Swift中,0…<5半闭区间中,不包含5?正确
16.此代码后面的分数值是多少?
var score = 2
score += 1
3
17.Swift 中关于 if 语句描述错误的是( )if 后面的表达式的值为 false 时,程序需要执行后面大括号里的语句
18以下关于跳转语句说法正确是()break是结束最近的循环体
19.关于函数的说法错误的是()
带参数函数的返回值不能为Void
20.打印版打印出来的是()
for i in 0…5 {
if i == 2{
continu }
print(i)
}
0,1,3,4
21.打印版打印的结果是:()
var a = 10
switch a {
case 10:
print(“10”)
var str1 = “hello world”
fallthrough
case 20:
print(“20”)
fallthrough
case 30:
print(“30”)
default:
print(“默认”)
}
A.10
B.10,20
C.10,20,30
D.30
正确答案:
C
答案为:C fallthrough 贯穿
二、综合题 (共 25.00 分)
1.此函数第二行发生“Type annotation missing in pattern ”错误,请修复这行错误
func issBelow13(number:Int) ->Bool{
var isBelow
if number < 13 {
isBelow = true
}else{
isBelow = false
}
return isBelow
}
(1)以下哪个选项可以,修复第二行错误?
A.var isBelow:String
B.var isBelow:Bool
C.var isBelow:Int
D.var isBelow:Float
正确答案:(1)B
第五章
以下哪段代码片段会产生如下错误?
Cannot assign value of type ‘Int’ to type ‘String’
let myFirstWord = “juice”
let myFirstWord = “bababa”
B.
let myFirstWord = “bye”
myFirstWord = “anemone”
C.
var myFirstWord = “wo wo”
myFirstWord = “balabala”
myFirstWord = 1
D.
myFirstWord = “hu hu”
满分:20.00 分
得分:20.00 分
你的答案:
C
在Swift中可以用isEmpty属性来判断字符串是否为空?
A.
正确
执行完下面的代码,在打印版中将打印出_______
let name = “tony”
print("(name.hasPrefix(“t”))")
[object Object]
通过执行完下面的代码截取字符串str后,cut是?______
let str = “hellWorld”
let cut = (str as NSString).substring(with: NSMakeRange(2, 5))
满分:20.00 分
得分:20.00 分
你的答案:
第1空:
llWor
执行完下面的代码,打印版将打印出?______
let str = “hello”
let str2 = “Hello”
if str == str2 {
print(“str等于str2”)
}else {
print(“str不等于str2”)
}
满分:20.00 分
得分:20.00 分
你的答案:
第1空:
str不等于str2
第六章
一、单选题 (共 40.00 分)
1.
定义一个数组 var arr:[Int] = [1,2,3,4,5],数组中的arr[3]指的是()
A.
答案:1
B.
答案:2
C.
答案:3
D.
答案:4
满分:20.00 分
得分:20 分
你的答案:
D
教师评语:
暂无
2.
是什么导致代码中第二行的错误?
let guestList = [“xiaohua”,“xiaomei”,“xiaohui”]
guestList[0] = “xiaoguo”
A.
它试图向字符串数组添加数字
B.
它试图为第0个元素进行赋值,但该元素不存在
C.
它试图替换掉现有元素,而不是进行追加
D.
它试图修改集合,但该集合是不可变的
满分:20.00 分
得分:20 分
你的答案:
D
教师评语:
暂无
二、判断题 (共 40.00 分)
1.
removeAtIndex方法从数组删除一个元素,该方法删掉指定索引上的元素,并返回这个被删掉的元素?
A.
正确
B.
错误
满分:20.00 分
得分:20 分
你的答案:
A
教师评语:
暂无
2.
Swift中字典是无序的集合,通过键值对存在
A.
正确
B.
错误
满分:20.00 分
得分:20 分
你的答案:
A
教师评语:
暂无
三、问答题 (共 20.00 分)
1.
什么是数组?试着创建一个数组
满分:20.00 分
得分:20 分
你的答案:
//数组是有序的元素序列
var guestList =[“xiaohua”,“xiaomei”,“xiaohui”]
第七章
一、单选题 (共 60.00 分)
1.
为什么Band结构的定义中有错误?
struct Musicien{
let name:String
let preferredMaxDecibels:Int
}
struct Band{
var leadSinger:Musician
var bassist:Musician
let drummer:Musician
}
A.
Musician结构没有自定构造器
B.
Band结构混合使用可变的var和不可变的let属性
C.
Band结构使用自定的Musician类型,而不是内建类型
D.
Band成员的类型与已定义的Musician类型不匹配
满分:20.00 分
得分:0 分
你的答案:
C
教师评语:
暂无
2.
为什么此代码的最后一行中有错误?
let prospectiveGuitarist = Musician(name: “tony”, preferredMaxDecibels: 68)
prospectiveGuitarist.preferredMaxDecibels = 99
A.
prospectiveGuitarist是不可变的常量,无法更改
B.
Musician结构混合使用可变的var和不可变的let属性
C.
Musician结构同时具有String和Int类型
D.
新赋值95未声明为Int
满分:20.00 分
得分:20.00 分
你的答案:
A
教师评语:
暂无
3.
这种属性的名称是什么?
var messageCount:Int{
return message.count
}
A.
计算型属性
B.
变量属性
C.
动态属性
D.
单向属性
满分:20.00 分
得分:20.00 分
你的答案:
A
教师评语:
暂无
二、判断题 (共 40.00 分)
1.
在Swift类的继承中, 一个类可以继承另一个类的属性和方法?
A.
正确
B.
错误
满分:20.00 分
得分:20.00 分
你的答案:
A
教师评语:
暂无
2.
在Swift中子类不能重写父类方法?
A.
正确
B.
错误
满分:20.00 分
得分:20.00 分
你的答案:
B
第八章
一、单选题 (共 100.00 分)
1.
在Swift中viewWillAppear, viewDidAppear,viewDidLoad,viewWillDisappear,viewWillDisappear它们调用的先后顺序是?
A.
viewWillAppear,viewWillDisappear, viewDidAppear,viewDidLoad,viewDidDisappear
B.
viewDidLoad,viewWillAppear, viewDidAppear,viewWillDisappear,viewDidDisappear
C.
viewWillAppear,viewWillDisappear, viewDidAppear,viewDidDisappear,viewDidLoad
D.
viewWillAppear, viewDidAppear,viewWillDisappear,viewDidDisappear,viewDidLoad
满分:20.00 分
得分:0 分
你的答案:
D
教师评语:
暂无
2.
在Swift中UIButton设置背景颜色用哪个属性?
A.
Center
B.
titleEdgeInsets
C.
currentTitle
D.
backgroundColor
满分:20.00 分
得分:20.00 分
你的答案:
D
教师评语:
暂无
3.
以下哪个图像显示已连接interface Builder出口?
A.
B.
满分:20.00 分
得分:20.00 分
你的答案:
A
教师评语:
暂无
4.
App需要什么信息才能将视图放在屏幕的正确位置?
A.
视图距离侧边的水平距离和距离离顶部的垂直距离,以及宽度和高度
B.
视图屏幕上的重要性,以及相对于其他元素的Z顺序
C.
视图的边框宽度和透明度,以及四舍五入的圆角半径
D.
视图的信息检索速度,以及它的字体大小和字符数
满分:20.00 分
得分:20.00 分
你的答案:
A
教师评语:
暂无
5.
下面带数字的橙色线代表什么?
A.
标签的布局约束与Interface Builder显示的框架不匹配,当App运行时,标签将以橙色轮廓框架的大小和位置进行显示
B.
Interface Builder中的标签框架与iOS设计原则不一致,当App运行时,用户将对标签的位置感到困惑
C.
标签的内容不适合当前框架,当App运行时,某些文本将因被切而无法显示完整
满分:20.00 分
得分:20.00 分
你的答案:
A
第九章
一、单选题 (共 80.00 分)
1.
在Swift中UITextField设置文本提示用以下哪个属性?
A.
backgroundColor
B.
placeholder
C.
NSTextAlignment
D.
isEditing
满分:20.00 分
得分:20.00 分
你的答案:
B
教师评语:
暂无
2.
在Swift中UILab设置文本颜色用以下哪个属性?
A.
backgroundColor
B.
isEnabled
C.
isHighlighted
D.
textColor
满分:20.00 分
得分:20.00 分
你的答案:
D
教师评语:
暂无
3.
执行完下面的代码将在模拟器上显示什么?
let btn = UIButton(type: .custom)
btn.frame = CGRect.init(x: 100, y: 100, width: 100, height: 100)
btn.backgroundColor = UIColor.red
btn.layer.cornerRadius = 50
self.view.addSubview(btn)
A.
一个背景颜色为绿色的方形按钮
B.
一个背影颜色为绿色的圆形按钮
C.
一个背景颜色为红色的方形按钮
D.
一个背景颜色为红色的圆形按钮
满分:20.00 分
得分:20.00 分
你的答案:
D
教师评语:
暂无
4.
在UILabel类中的哪个属性是将文本设置成居中状态的?
A.
Text
B.
textAlignment
C.
attributedText
D.
highlightedTextColor
满分:20.00 分
得分:20.00 分
你的答案:
B
教师评语:
暂无
二、填空题 (共 20.00 分)
1.
UITextField类中设置键盘样式用哪个属性?请写出属性名字?______
满分:20.00 分
得分:20.00 分
你的答案:
第1空:
keyboardType
第十章
一、单选题 (共 50.00 分)
1.
在Swift中以下哪个可以用于正向传值?
A.
属性传值
B.
协议传值
C.
闭包传值
D.
通知传值
满分:50.00 分
得分:50.00 分
你的答案:
A
教师评语:
暂无
二、多选题 (共 50.00 分)
1.
在Swift中用于传值的有以下哪些?
A.
属性传值
B.
协议传值
C.
闭包传值
D.
通知传值
满分:50.00 分
得分:50.00 分
你的答案:
A B C D
第十一章
一、单选题 (共 20.00 分)
1.
如何将UITabBarController控制器添加到UIWindow窗口上?
A.
window.view = UITabBarController
B.
window.addSubView = UITabBarController
C.
window.rootViewController = UITabBarController
D.
window.childViewController = UITabBarController
满分:20.00 分
得分:0 分
你的答案:
D
正确答案:
C
教师评语:
暂无
二、问答题 (共 80.00 分)
1.
简述封装一个UITabBarController的思路
满分:30.00 分
得分:30 分
你的答案:
教师评语:
暂无
2.
简述UITabbarController的底层原理
满分:50.00 分
得分:50 分
你的答案:
教师评语:
暂无
第十二章
一、单选题 (共 30.00 分)
1.
在iOS中,苹果开发人员提供了一套自己的动画框架,哪一个是苹果的动画框架?
A.
UIKit
B.
ARKit
C.
Core Location
D.
Core Animation
满分:30.00 分
得分:30 分
你的答案:
D
正确答案:
D
教师评语:
暂无
二、问答题 (共 70.00 分)
1.
简述iOS的动画原理
满分:50.00 分
得分:50 分
你的答案:
一个 UIView 从 (0,0) 匀速移动到 (100,0)的动画,动画总时间是0.25秒。假设我们基于 60 FPS 来显示动画,那么在0.25秒内就应该有15帧画面,在每帧画面中,这个 UIView 的 x坐标,每次应移动 100/15 的距离。如果我们每隔 0.25/15 秒刷新一次UIView 的 x坐标,那么就能实现这个动画效果了。对于 x坐标而言,每帧的位置就可以通过一个基于时间变化量的函数来求得:x=f(t) 。
所以,一个动画的本质,就是动画对象(这里是 UIView)的状态,基于时间变化的反应了。简单说,就是给定任意一个时刻,如果你都能得到这个动画对象的位置和、形状等等属性,你就能实现这个动画了。属性值的变化,既可能是位置、透明度、旋转角度等的变化,也包括形状的改变,比如从一条直线变化成一个圆圈,目标就是要得到变化过程中特定时刻的中间态。
教师评语:
暂无
2.
简述layer层在动画中有什么作用?
满分:20.00 分
得分:20 分
你的答案:
核心动画直接作用于layer层;在后台线程执行,不阻塞主线程,layer是CALayer的类型,其创建方式和UIView创建方式类似。不过通过此方式添加的图层在模拟器的层次结构中只能看到一个view。其相当于在view上染了一个宽和高分别为80的湖蓝色,而不是在view上添加了一个宽和高为80的view。
教师评语:
暂无
第十三章
一、问答题 (共 100.00 分)
1.
简述UITabbarController的底层原理
满分:30.00 分
得分:30 分
你的答案:
UITabBarController能够方便地管理多个控制器,并且在多个控制器之间切换。
父控制器:通过标签控制器管理多个子控制器,标签控制器就称为父控制器
子控制器:添加到标签控制器里的控制器都做为标签控制器的子控制器
标签栏:也叫选项卡栏,方便用户切换到对应的界面,当往标签控制器里添加子控制器,标签栏就会有序的自动生成对应的标签
标签栏按钮:也叫标签,UITabBarButton,这个类只有apple内部开发人员才能使用
教师评语:
暂无
2.
简述loadView和ViewDidLoad的区别?
满分:40.00 分
得分:30 分
你的答案:
1.每次访问UIViewController的view(比如controller.view、elf.view)而且view为nil,loadView方法就会被调用。
loadView方法是用来负责创建UIViewController的view。
2.无论你是通过xib文件还是重写loadView方法创建UIViewController的view,在view创建完毕后,最终都会调用viewDidLoad方法。一般我们会在这里做界面上的初始化操作,比如往view中添加一些子视图、从数据库或者网络加载模型数据装配到子视图中
3.
(1)第一次访问UIViewController的view时,view为nil,然后就会调用loadView方法创建view
(2)view创建完毕后会调用viewDidLoad方法进行界面元素的初始化
教师评语:
暂无
3.
简述自定义分栏控制器UITabbarController的步骤
满分:30.00 分
得分:30 分
你的答案:
1.创建UITabBarController
创建并初始化一个UITabBarController;
将UITabBarController设置为根视图控制器。
2.创建2个UIViewController做视图控制器
选中工程,右键-New File…选择“Cocoa Touch Class”Next,给个合理的名称ViewController等2个视图控制器,再Next完成;在AppDelegate.m中包含2个视图控制器的头文件;在AppDelegate.m中初始化2个视图控制器;为2个视图控制器添加导航栏控制器;
3.添加UITabBarController需要的图标到工程目录
4.添加UITabBarController文字图片
教师评语:
暂无
第十四章
一、单选题 (共 30.00 分)
1.
UITabView继承哪一个类?
A.
UIControl
B.
UIView
C.
UILabel
D.
UIScrollView
满分:30.00 分
得分:30 分
你的答案:
D
正确答案:
D
教师评语:
暂无
二、问答题 (共 70.00 分)
1.
简述UITabView的复用原理
满分:40.00 分
得分:30 分
你的答案:
复用实现分析
查看UITableView头文件,会找到NSMutableArray* visiableCells,和NSMutableDictnery*reusableTableCells两个结构。visiableCells内保存当前显示的cells,reusableTableCells保存可重用的cells。
TableView显示之初,reusableTableCells为空,那么tableViewdequeueReusableCellWithIdentifier:CellIdentifier返回nil。开始的cell都是通过[[UITableViewCellalloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:CellIdentifier]来创建,而且cellForRowAtIndexPath只是调用最大显示cell数的次数。
比如:有100条数据,iPhone一屏最多显示10个cell。程序最开始显示TableView的情况是:
1. 用[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:CellIdentifier]创建10次cell,并给cell指定同样的重用标识(当然,可以为不同显示类型的cell指定不同的标识)。并且10个cell全部都加入到visiableCells数组,reusableTableCells为空。
2.向下拖动tableView,当cell1完全移出屏幕,并且cell11(它也是alloc出来的,原因同上)完全显示出来的时候。cell11加入到visiableCells,cell1移出visiableCells,cell1加入到reusableTableCells。
3.接着向下拖动tableView,因为reusableTableCells中已经有值,所以,当需要显示新的cell,cellForRowAtIndexPath再次被调用的时候,tableViewdequeueReusableCellWithIdentifier:CellIdentifier,返回cell1。cell1加入到visiableCells,cell1移出reusableTableCells;cell2移出visiableCells,cell2加入到reusableTableCells。之后再需要显示的Cell就可以正常重用了。
所以整个过程并不难理解,但需要注意正是因为这样的原因:配置Cell的时候一定要注意,对取出的重用的cell做重新赋值,不要遗留老数据。
一些情况
使用过程中,我注意到,并不是只有拖动超出屏幕的时候才会更新reusableTableCells表,还有:
1.reloadData,这种情况比较特殊。一般是部分数据发生变化,需要重新刷新cell显示的内容时调用。在cellForRowAtIndexPath调用中,所有cell都是重用的。我估计reloadData调用后,把visiableCells中所有cell移入reusableTableCells,visiableCells清空。cellForRowAtIndexPath调用后,再把reuse的cell从reusableTableCells取出来,放入到visiableCells。
2.reloadRowsAtIndex,刷新指定的IndexPath。如果调用时reusableTableCells为空,那么cellForRowAtIndexPath调用后,是新创建cell,新的cell加入到visiableCells。老的cell移出visiableCells,加入到reusableTableCells。于是,之后的刷新就有cell做reuse了。
教师评语:
暂无
2.
在UITabView中如何添加数据源和实现代理方法?
满分:30.00 分
得分:30 分
你的答案:
UITableViewController是UIViewController的子类,UITableViewController默认扮演了3种角色:视图控制器、UITableView的数据源和代理
第section分区尾部的高度
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
@property(nonatomic,assign) id delegate 代理
教师评语:
暂无
第十五章
一、单选题 (共 30.00 分)
1.
控制UIScrollView偏移量的属性是哪一个?
A.
contentInset
B.
contentOffSet
C.
contentSize
满分:30.00 分
得分:30 分
你的答案:
C
正确答案:
B
教师评语:
暂无
二、问答题 (共 70.00 分)
1.
简述UIScrollView在什么条件下才可以滚动,为什么?
满分:40.00 分
得分:30 分
你的答案:
- 没有设置contentSize , contentSize一定要设置
2.scrollEnabled = NO , scrollEnabled,滚动不能禁用;
*3.没有接收到触摸事件:userInteractionEnabled = NO
教师评语:
暂无
请使用UIScrollView实现界面分页
满分:30.00 分
得分:30 分
你的答案:
//
// RollView.swift
// swift0830
//
// Created by Mac on 2019/10/18.
// Copyright © 2019 Mac. All rights reserved.
//
//轮播图
import UIKit
//遵循协议
class RollView: UIView,UIScrollViewDelegate {
//轮播视图
var scrollView:UIScrollView?
//图片数组
var imgArr:[Any]?
//定时器
var timer:Timer?
var time:TimeInterval = 1
//小圆点
var pagController:UIPageControl?
//convenience 关键字
convenience init (frame:CGRect,imgArr:[Any]) {
//调用指定构造器
self.init(frame:frame)
self.imgArr = imgArr
self.initUI()
self.initTime()
}
func initUI() {
//创建滚动视图对象并初始化
self.scrollView = UIScrollView.init(frame: self.bounds)
//是否分页
self.scrollView?.isPagingEnabled = true
//不展示滚动条
self.scrollView?.showsHorizontalScrollIndicator = false
self.scrollView?.showsVerticalScrollIndicator = false
self.scrollView?.contentSize = CGSize(width: self.bounds.width * CGFloat((self.imgArr?.count)!), height: 0)
// 设置代理
self.scrollView?.delegate = self
//添加到RollView 视图上去
self.addSubview(self.scrollView!)
//创建UIpageControl 的对象并初始化,小圆点
self.pagController = UIPageControl(frame:CGRect.init(x: 0, y: self.bounds.size.height - 30, width: self.bounds.size.width, height: 30))
//设置小圆点的数量
self.pagController?.numberOfPages = (self.imgArr?.count)!
//当前页数
self.pagController?.currentPage = 0
//小圆点的颜色
self.pagController?.pageIndicatorTintColor = UIColor.green
//当前页数小圆点的颜色
self.pagController?.currentPageIndicatorTintColor = UIColor.red
//将pagcontroller 添加到底部视图上去
self.addSubview(self.pagController!)
let scroll_W = self.bounds.size.width
let scroll_H = self.bounds.size.height
//创建图片
for i in 0..<self.imgArr!.count {
//创建UIImageView并初始化
let imgView = UIImageView(frame: CGRect.init(x: CGFloat(i) * scroll_W, y: 0, width: scroll_W, height: scroll_H))
//添加图片
imgView.image = self.imgArr?[i] as? UIImage
self.scrollView?.addSubview(imgView)
}
}
func initTime() {
//当只有一张图片的时候不需要开启定时器
if (self.imgArr?.count)! <= 1 {
return
}
//如果定时器已开启,关掉
if timer != nil {
timer?.invalidate()
}
//创建定时器
timer = Timer.scheduledTimer(timeInterval: self.time, target: self, selector: #selector(timeRun), userInfo: nil, repeats: true)
//添加到RunLoop中
RunLoop.current.add(timer!, forMode: RunLoopMode.defaultRunLoopMode)
}
//每隔一秒运行这个方法一次。定时器
@objc func timeRun() {
let nextPage:Int = (self.pagController?.currentPage)! + 1
let i: CGFloat = CGFloat(nextPage % (self.imgArr?.count)!)
self.scrollView?.setContentOffset(CGPoint.init(x: (self.scrollView?.bounds.size.width)! * i, y: 0), animated: true)
}
//滚动视图结束滚动
func scrollViewDidScroll(_ scrollView: UIScrollView) {
self.pagController?.currentPage = Int(scrollView.contentOffset.x / scrollView.bounds.size.width)
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
self.pagController?.currentPage = Int(scrollView.contentOffset.x / scrollView.bounds.size.width)
}
}
第十六章
一、问答题 (共 100.00 分)
1.
简述瀑布流布局的原理
满分:100.00 分
得分:90 分
你的答案:
瀑布流布局,要求进行布局的元素等宽,然后计算元素的宽与浏览器的宽度之比,得到需要布置的列数。
创建一个数组,长度为列数,数组元素为每一列已布置元素的总高度。(一开始为0)。
将未布置的元素,依次布置到高度最小的那一列,然后更新这一列的高度,就得到了瀑布流布局。
教师评语:
暂无