Swift_方法
Swift_方法
///方法
class Methods: NSObject {
func test() {
// self.testInstanceMethods() //实例方法
self.testTypeMethods() //类型方法
}
//实例方法
func testInstanceMethods() {
self.testLocalAndExternalParameterNames()
self.testSelfProperty()
self.testModifyingValueTypesFromWithinInstanceMethods()
self.testAssigningToSelfWithinMutatingMethod()
}
//内部和外部属性
func testLocalAndExternalParameterNames() {
class Counter {
var count: Int = 0
func incrementBy(_ amount: Int, numberOfTimes: Int) {
count += amount * numberOfTimes
}
}
let counter = Counter()
counter.incrementBy(5, numberOfTimes: 3)
print("\(counter.count)")
/* print
15
*/
}
//self属性
func testSelfProperty() {
//self属性
struct Point {
var x = 0.0, y = 0.0
func isToTheRightOfX(_ x: Double) -> Bool {
//这里有内部和外部属性
return self.x > x
}
}
let somePoint = Point(x: 4.0, y: 5.0)
print("\(somePoint.isToTheRightOfX(1.0))")
/*
true
*/
}
//在实例方法中修改值类型
func testModifyingValueTypesFromWithinInstanceMethods() {
//因为结构体是值对象,其内部方法无法修改外部值,为了让结构体支持修改结构体内的属性。
//方法体前加mutating,让结构体的实例方法可以修改结构体中的值
struct Point {
var x = 0.0, y = 0.0
mutating func moveByX(_ deltaX: Double, y deltaY: Double) {
x += deltaX
y += deltaY
}
}
var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveByX(2.0, y: 3.0)
print("(\(somePoint.x), \(somePoint.y))")
let fixedPoint = Point(x: 3.0, y: 3.0)
print(fixedPoint)
// 结构体是值对象,使用let常量后,无法修改内部值
// fixedPoint.moveByX(2.0, y: 3.0) // 抛错
/* print
(3.0, 4.0)
(Point #1)(x: 3.0, y: 3.0)
*/
}
//自我变异
func testAssigningToSelfWithinMutatingMethod() {
//mutating还可以修改当前结构体和当前枚举
//结构体测试
struct Point {
var x = 0.0, y = 0.0
mutating func moveByX(_ deltaX: Double, y deltaY: Double) {
self = Point(x: x + deltaX, y: y + deltaY)
}
}
var point = Point()
point.moveByX(1.0, y: 1.0)
print(point)
//枚举测试
enum TriStateSwitch {
case off, low, high
mutating func next() {
switch self {
case TriStateSwitch.off:
self = TriStateSwitch.low
print(self)
case TriStateSwitch.low:
self = TriStateSwitch.high
print(self)
case TriStateSwitch.high:
self = TriStateSwitch.off
print(self)
}
}
}
var ovenLight = TriStateSwitch.low
ovenLight.next()
ovenLight.next()
/*
(Point #1)(x: 1.0, y: 1.0)
high
off
*/
}
//类型方法
func testTypeMethods() {
//类
class SomeClass {
class func someTypeMethod() {
// type method implementation goes here
}
}
SomeClass.someTypeMethod()
// 结构体
struct LevelTracker {
// static修改属性,方法体要修改static属性,方法前要使用static
static var highestUnlockedLevel = 1
static func levelIsUnlocked(_ level: Int) -> Bool {
return level <= highestUnlockedLevel
}
}
print("\(LevelTracker.levelIsUnlocked(2))")
/*
false
*/
}
}
Swift_方法的更多相关文章
- javaSE27天复习总结
JAVA学习总结 2 第一天 2 1:计算机概述(了解) 2 (1)计算机 2 (2)计算机硬件 2 (3)计算机软件 2 (4)软件开发(理解) 2 (5) ...
- Swift_协议
Swift_协议 点击查看源码 //协议 @objc protocol SomeProtocol:class { //class代表只用类才能实现这个协议 func test() //@objc:OC ...
- Swift_销毁
Swift_销毁 点击查看源码 销毁 func test() { class SomeClass { //类销毁时 通知此方法 deinit { print("销毁") } } v ...
- Swift_初始化
#Swift_初始化 点击查看源码 初始化结构体 //初始化结构体 func testInitStruct() { //结构体 类中默认方法 struct Size { //宽 var width = ...
- Swift_继承
Swift_继承 点击查看源码 func testInheritance() { //基类 class Base { var count = 0.0 var description: String { ...
- mapreduce多文件输出的两方法
mapreduce多文件输出的两方法 package duogemap; import java.io.IOException; import org.apache.hadoop.conf ...
- 【.net 深呼吸】细说CodeDom(6):方法参数
本文老周就给大伙伴们介绍一下方法参数代码的生成. 在开始之前,先补充一下上一篇烂文的内容.在上一篇文章中,老周检讨了 MemberAttributes 枚举的用法,老周此前误以为该枚举不能进行按位操作 ...
- IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法
直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
随机推荐
- 高德地图 API JavaScript API
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm12.aspx ...
- vue学习笔记(一)
一.MVC 和 MVVM 的区别 MVC: Model(模型)应用程序中用于处理应用程序数据逻辑的部分(通常模型对象负责在数据库中存取数据). View(视图)显示数据(通常视图是依据模型数据创建的) ...
- Echarts按需引入后没有显示图例问题
因为Echarts官网的例子都是引入整个Echarts.js.如果使用按需引入对应模块就要记得引入legend模块,才能显示出图例. 例如这样: require("echarts/lib/c ...
- js-滚动到指定位置导航栏固定顶部
最近整理一下之前做的一个项目,把滚动条动态固定顶部的代码整理出来和大家分享,上代码 <!DOCTYPE html> <html> <head> <meta c ...
- Linux Centos7安装Oracle12c第二版本
环境: CentOS7@VMware12,分配资源:CPU:2颗,内存:4GB,硬盘空间:30GB Oracle12C企业版64位 下载地址:http://www.oracle.com/technet ...
- MySQL基于mysqldump快速搭建从库
MySQL主从搭建总的来说大致分为3个步骤: 1. 为主从实例添加复制所需参数以及创建复制用的账户 2. 需要 […]
- 【免费公测】阿里云SSD云盘,不仅仅是IO提速10倍
今天很高兴为大家介绍最新的ECS存储服务:SSD云盘. SSD云盘基于全SSD存储介质.利用阿里云飞天分布式存储技术,提供数据可靠性99.999%的高性能存储:该产品具备以下特点: l 高性能:单个 ...
- C# Winform DataGridView获取单元格的值
1,可以直接通过DataGridView的重载运算符[]直接获取 使用方法: dataGridView[columnIndex][rowsIndex].Value.ToString().//colum ...
- Tomcat的运行模式
tomcat的三种运行模式 tomcat Tomcat Connector的三种不同的运行模式性能相差很大,有人测试过的结果如下: 这三种模式的不同之处如下: ●BIO: 一个线程处理一个请求.缺 ...
- python 测试:生成exe文件
任务: test.py print(input('请输入:')) 将test.py生成test.exe 解答: 安装: pip install pyinstaller 命令使用: (绝对地址)pyin ...