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源码解析 前面 ...
随机推荐
- 爬取地图列表并下载-node.js
var fs = require('fs'); var request = require('request'); var cheerio = require('cheerio'); var url ...
- jquery not() 方法
1.not(expression) 根据表达式参数的值,从包装集里删除元素 example : $('img[alt]').not('[alt*=joy]') 返回包含属性alt的img元素,但img ...
- C++类继承--继承后函数的值
类的继承会首先寻找基类,若基类未实现,则会寻找派生类的函数 1. class继承,函数不继承 #include <stdio.h> class Base { public: Base(){ ...
- 04_dubbo_ioc
[dubbo的IOC实现方法] dubbo的IOC具体实现在:T injectExtension( T instance )方法中,该方法在3个地方被使用: ExtensionLoader.getEx ...
- DLL调用的两种方式(IDE:VC6.0,C++)
原文:http://www.cnblogs.com/Pickuper/articles/2050409.html DLL调用有两种方式,一种是静态调用,另外一种是动态调用 (一)静态调用 静态调用是一 ...
- TextView的跑马灯效果(AS开发实战第二章学习笔记)
TextView的跑马灯效果跑马灯用到的属性与方法说明singleLine 指定文本是否单行显示ellipsize 指定文本超出范围后的省略方式focusable 指定是否获得焦点,跑马灯效果要求设置 ...
- CSS media query应用中的层叠特性使用最佳实践
media query是css3规范中引入的,它提供了一种responsive design的基础机制:浏览器在不同size的设备中将以不同样式展现网页,这就给一个网页能够适应不同device一种可能 ...
- 【Leetcode】【Medium】Reorder List
Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do thi ...
- Error: A JNI error has occurred, please check your installation and try again
自己写的maven项目打包以后的一个email测试类jar,放到linux上运行时报错: Error: A JNI error has occurred, please check your inst ...
- 获取所有权windows目录所有权
Takeown /r /f 盘符:\目录\目录 例如: Takeown /r /f C:\Windows\CSC