iOS移动应用开发

恭喜同学已掉坑,点个赞,师兄没空,点赞的人太少了,你们自己看着来。答案都在。

第一二三四章

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 分
你的答案:

  1. 没有设置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)。
将未布置的元素,依次布置到高度最小的那一列,然后更新这一列的高度,就得到了瀑布流布局。
教师评语:
暂无

发布了40 篇原创文章 · 获赞 16 · 访问量 5263

猜你喜欢

转载自blog.csdn.net/CSDNWuZhiChun/article/details/103652450