欢迎来到千学网!
您现在的位置:首页 > 实用文 > 其他范文

swift创建函数

时间:2022-08-24 08:30:53 其他范文 收藏本文 下载本文

以下是小编精心整理的swift创建函数,本文共7篇,希望对大家有所帮助。

swift创建函数

篇1:swift创建函数

/*

定义函数

*/

//sayHello的函数主体首先定义了一个新的名为greeting的String常量

//并将其设置加上personName组成一句简单的问候消息

//(persnalName:String)函数的传参

//String: 函数的返回值类型,返回箭头( - >)

func sayHello(persnalName:String)->String

{

let greeting = Hello + persnalName + !

return greeting;

}

//无返回值的函数

func sayGoodBye(personNanem:String)

{

println(Goodbye,(personNanem)!)

}

//第一个函数printAndCount,打印了一个字符串,然后并以Int类型返回它的字符数

func printAndCount(stringToPoint:String)->Int

{

println(stringToPoint)

return count(stringToPoint)

}

//第二个函数printWithoutCounting,调用的第一个函数,但忽略它的返回值

//函数的调用

//当第二函数被调用时,消息由第一函数打印了回来,但没有使用其返回值

func printWithoutCounting(stringToPonit:String)

{

printAndCount(stringToPonit)

}

func firstSwift(sender:UIButton)

{

println(第一个button的点击事件)

self.label1.text = button点击了

}

/*

调用函数

*/

println(sayHello(第一个函数))

sayGoodBye(first company)

printAndCount(Hello world !)

printWithoutCounting(hello world !)

篇2:SWIFT

SWIFT

网友luna: 我知道SWIFT是指环球银行金融电信协会,但它的完整形式到底是什么?谁能告诉我吗?谢谢。Dr.eye:我们上次在指点迷津中提及了SWIFT,的确,它是指环球银行金融电信协会。它的完整形式是:Society for Worldwide Interbank Financial Telecommunication。SWIFT是一个银行同业间的国际合作的国际性非营利法人组织,成立于一九七三年,总部设于比利时首都布鲁塞尔,在美国和荷兰分别设有国际作业中心。目前全球大多数国家大多数银行已使用SWIFT系统,各国都能通过SWIFT网络直接办理国际间各币种之间外汇清算,目前是全球金融通信和资金清算的重要系统。SWIFT的使用,使银行的结算提供了安全、可靠、快捷、标准化、自动化的通讯业务,从而大大提高了银行的结算速度。SWIFT需要会员资格,我国的大多数专业银行都是其成员;费用较低,同样多的内容,SWIFT的费用只有TELEX(电传)的18%左右,只有CABLE(电报)的2.5%左右;它的的'安全性也较高,SWIFT的密押比电传的密押可靠性强、保密性高,且具有较高的自动化;另外,SWIFT的格式具有标准化,对于SWIFT电文,SWIFT组织有着统一的要求和格式,因此目前信用证的格式主要都是用SWIFT电文。

篇3:Objectivec调用Swift

在Objective-C中使用Swift,步骤类似:

1、首先创建一个Objective-C的项目:

2.添加一个Swift的类文件:

3、点击Next,弹出一个对话框,选择YES

4、生成一个YourProject-Bridging-Header.h文件,

5、在SwiftClass创建类如下:

import Foundation class SwiftTest : NSObject { func test->NSString{ return “test” } }

6、在ViewController调用SwiftTest类如下:

#import “ViewController.h” #import “ObjectiveTest-Swift.h” //这里注意和项目名称一致 “YourProject-Swift.h”

7、import之后一定要先编译一次,否则编译出错,

Objectivec调用Swift

8、编译之后就可以在类里面调用了如下:

- (void)viewDidLoad { [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib. SwiftTest *tests = [SwiftTest new]; [tests test]; }

篇4:Swift 面试题及其答案

虽然Swift出生才一年,但是它已经成为最流行的编程语言之一了。它的语法很简单,以至于当它发布的时候,JavaScript开发者感觉就像下图一样。

事实上,Swift是一种复杂的语言。它包含面向对象和函数方法这两个方面,并且随着新版本的发布在一直进化。

你可以用这些问题来测试应聘者关于Swift方面的知识水平,或者测试一下你自己。如果你不知道答案,没关系,没一个问题下面都有答案供你学习。

这些问题包含两个方面:

笔试问题:通过电子邮件做一个编程测试是极好的,因为这涉及到写大量的代码,从代码质量上可以看出一个人的水平。

面试问题:电话面试或者面对面面试也是很好的,因为对面试者来说口头交流会更方面。

每个方面有分成三个等级:

初级:适合读了一到两本有关Swift的书,并且已经开始用Swift开发应用程序的初学者。

中级:适合那些对Swift语言的概念有深刻理解和强烈兴趣的,并且一直在阅读大量有关Swift的博客文章并进行实践的中级工程师。

高级:适合那些以探索Swift语言知识为乐趣,挑战自己,使用前言技术的人们。

假如你想回答这些问题,我建议你在回答这些问题之前,打开Playground运行一下这些问题的代码。这些问题的答案都在Xcode 7.0 Beta 6 版本中测试过。

准备好了吗?系好安全带,现在就开始!

笔试问题

初学者

问题1、(Swift 1.0及其之后的版本的问题)有什么更好的方法来写下面的for循环?

for var i = 0; i < 5; i++ {

print(“Hello!”)

}

答案:

for _ in 0...4 {

print(“Hello!”)

}

Swift 实现了两个数组运算符closed operator 和 half-operator.前者包含数组中得所有值。例如:下面的例子包含从0到4得所有整数

0...4

half-operator不包含数组中的最后一个元素,下面的例子会得到的结果和上面的一样:

0..<5

问题2C Swift 1.0 or later

思考下面的问题:

struct Tutorial {

var difficulty: Int = 1

}

var tutorial1 = Tutorial()

var tutorial2 = tutorial1

tutorial2.difficulty = 2

tutorial1.difficulty 和 tutorial2.difficulty的值分别是多少?假如Tutorial是一个类,会有什么不同?并说明原因。

答案:tutorial1.difficulty 的值是1,然而tutorial2.difficulty的值是2.

在Swift中结构体是值类型,他们的值是复制的而不是引用的。下面的一行代码意思是复制了tutorial1的值并把它赋值给tutorial2:

var tutorial2 = tutorial1

从这一行开始,tutorial2值得改变并不影响tutorial1的值。

假如Tutorial是一个类,tutorial1.difficulty和tutorial2.difficulty的值将都会是2.在Swift中类对象都是引用类型。tutorial1属性的任何改变将会反应到tutorial2上,反之亦然。

问题3 C Swift 1.0 or later

view1声明成var类型,view2声明let类型。这里有什么区别吗?下面的最后一行代码能编译吗?

import UIKit

var view1 = UIView()

view1.alpha = 0.5

let view2 = UIView()

view2.alpha = 0.5 // Will this line compile?

答案:view1是个变量可以重新赋值给一个新的实例化的UIView对象。使用let你只赋值一次,所以下面的代码是不能编译的:

view2 = view1 // Error: view2 is immutable

但是UIView是一个引用类型的类,所以你可以改变view2的属性,也就是说最后一行代码是可以编译的:

let view2 = UIView()

view2.alpha = 0.5 // Yes!

问题4 C Swift 1.0 or later

下面的代码是把数组里面的名字按字母的顺序排序,看上去比较复杂。尽最大的可能简化闭包里的代码。

let animals = [“fish”, “cat”, “chicken”, “dog”]

let sortedAnimals = animals.sort { (one: String, two: String) -> Bool in

return one < two

}

答案:

第一个简化的是参数。系统的参数类型推断功能,可以计算出闭包里面参数的类型,所以你不必定义参数的类型:

let sortedAnimals = animals.sort { (one, two) -> Bool in return one < two }

函数返回值也可以被推断出来,所以简化掉,代码变为:

let sortedAnimals = animals.sort { (one, two) in return one < two }

这个$i 符号可以代替参数名字,代码进一步简化为:

let sortedAnimals = animals.sort { return $0 < $1 }

在一个独立的闭包内,return这个关键字是可以省略的。最后声明的返回值就是闭包的返回值:

let sortedAnimals = animals.sort { $0 < $1 }

这简化很多了,但是我们不能止步于此!

对于字符串,有一个定义如下的比较函数:

func Bool

这个简单的小函数可以使你的代码简洁如下:

let sortedAnimals = animals.sort(<)

注意每一步的编译结果都相同,但是最后一步你的闭包里只有一个字符。

问题5 C Swift 1.0 or later

下面的代码创建了两个类Address和Person,并且创建了两个实例对象分别代表Ray和Brain.

class Address {

var fullAddress: String

var city: String

init(fullAddress: String, city: String) {

self.fullAddress = fullAddress

self.city = city

}

}

class Person {

var name: String

var address: Address

init(name: String, address: Address) {

self.name = name

self.address = address

}

}

var headquarters = Address(fullAddress: “123 Tutorial Street”, city: “Appletown”)

var ray = Person(name: “Ray”, address: headquarters)

var brian = Person(name: “Brian”, address: headquarters)

假设Brain搬家到街对面的建筑物里,那么你会这样更新他的地址:

brian.address.fullAddress = “148 Tutorial Street”

这样做将会发生什么?错误出在什么地方呢?

答案:Ray同样会搬家到新的建筑物里面。Address是一个引用类型类,所以无论你是通过ray或者brain访问headquarters,访问都是同一个实例化对象。headquarters对象的变化也会引起ray和brain的变化。你能想象如果Brain收到Ray的邮件或者相反Ray收到Brain的邮件,将会发生什么?解决方案是创建一个新的Address对象赋值给Brain或者把Address声明成为结构体而不是一个类。

中级

问题1C Swift 2.0 or later

思考下面的代码:

var optional1: String? = nil

var optional2: String? = .None

答案:两者没有什么不同。Optional.None(简称.None)是optional变量值初始化的标准方法,而nil只是.None语法的一种修饰。事实上下面语句输出是正确的:

nil == .None // On Swift 1.x this doesn't compile. You need Optional

.None

记住枚举类型的Optional下的None:

enum Optional{

case None

case Some(T)

}

问题2-Swift 1.0 or later

下面是thermometer作为类和结构体的例子:

public class ThermometerClass {

private(set) var temperature: Double = 0.0

public func registerTemperature(temperature: Double) {

self.temperature = temperature

}

}

let thermometerClass = ThermometerClass()

thermometerClass.registerTemperature(56.0)

public struct ThermometerStruct {

private(set) var temperature: Double = 0.0

public mutating func registerTemperature(temperature: Double) {

self.temperature = temperature

}

}

let thermometerStruct = ThermometerStruct()

thermometerStruct.registerTemperature(56.0)

但是这段代码编译失败了,请问哪里报错,出错的原因是什么。

建议:在使用Playground之前,认真阅读代码并思考。

答案:代码的最后一行不会被编译通过。ThermometerStruct结构体中正确的声明了一个mutating属性函数,它是用来改变结构体内部temperature属性的值的,但是编译器不通过的原因是,通过let创建的不可变的registerTemperature结构体调用了registerTemperature函数。

问题3C Swift 1.0 or later

下面的代码输出是什么?并说明理由。

var thing = “cars”

let closure = { [thing] in

print(“I love (thing)”)

}

thing = “airplanes”

closure()

答案:输出的是:I love cars。当闭包被声明的时候,抓捕列表就复制一份thing变量,所以被捕捉的值并没有改变,即使你给thing赋了一个新值。

如果你要忽视闭包中捕捉列表的值,那么编译器引用那个值而不是复制。这种情况下,被引用变量的值的变化将会反映到闭包中,正如下面的代码所示:

var thing = “cars”

let closure = {

print(“I love (thing)”)

}

thing = “airplanes”

closure() // Prints “I love airplanes”

问题4C Swift 2.0 or later

下面是一个全局函数,这个函数的功能是计算数组中特殊值得个数。(待校验)

func countUniques(array: Array) -> Int {

let sorted = array.sort(<)

let initial: (T?, Int) = (.None, 0)

let reduced = sorted.reduce(initial) { ($1, $0.0 == $1 ? $0.1 : $0.1 + 1) }

return reduced.1

}

它使用了< 和==运算符,他们限制着T(占位类型)的实际类型,也就是说T必须遵循Comparable协议。你可以这样使用它:

countUniques([1, 2, 3, 3]) // result is 3

现在要求你重写上面的方法作为Array的扩展方法,然后你就可以这样写代码:

[1, 2, 3, 3].countUniques() // should print 3

如何实现?

答案:在Swift 2.0 中,泛类型可以使用类型约束条件被强制扩展。但是假如这个泛类型不满足这个类型的约束条件,那么这个扩展方法既不可见也无法调用。

所以countUniques全局函数可以作为Array的扩展方法被重写如下:

extension Array where Element: Comparable {

func countUniques() -> Int {

let sorted = sort(<)

let initial: (Element?, Int) = (.None, 0)

let reduced = sorted.reduce(initial) { ($1, $0.0 == $1 ? $0.1 : $0.1 + 1) }

return reduced.1

}

}

注意:只有元类型实现了Comparable协议新的方法才可以被使用。例如,如果你在全部是UIView对象的数组中调用countUniques,编译器将会报错。

import UIKit

let a = [UIView(), UIView()]

a.countUniques() // compiler error here because UIView doesn't implement Comparable

问题5- Swift 2.0 or later

下面一个函数的功能是计算两个double(optional)类型的数的相除的结果。在执行除法之前,必须提前满足三个条件:

被除数必须包含nil值

除数必须为包含nil值

除数不能为零

func divide(dividend: Double?, by divisor: Double?) -> Double? {

if dividend == .None {

return .None

}

if divisor == .None {

return .None

}

if divisor == 0 {

return .None

}

return dividend! / divisor!

}

上面的函数可以正常使用,但是会存在两个问题:

篇5:Swift之数组使用

Swift提供两种类型的集合,一种是数组Array,另外一种是字典Dictionary,他们之间的共同点是都是用来存储相同类型的数据,不同点是数组中存放的数据是有序的,二字典中存放的数据时无序的,字典还具有两外一个特性,就是字典中所存储的数据是键值对(key - value)形式存在。

这里主要写一下Swift中数组类型使用

一、数组类型定义

想定义其他变量或者常量一样,如果我们在Swift中定义一个数据,也可以通过类型标注指定他的类型。在Swift中,数组类型有两种写法:

// 一是完整版:var colorArray : Array= [red,blue,green]//另外一种是简化版var colorArray1 : [String] = [red, blue, green]// 可以使用推导来声明数组var colorArray2 = [red, blue,green]var integerArray = [1,2,3]/*注:1、我们在定义数组时,指定数组中的数据类型,我们必须统一存放该类型数组 2、我们在定义数组时,不指定数组中的数据类型,则数组默认为anyObject类型。*/二、我们在定义数组时可以不指定数组类型:

var inferList = [eggs,123,true]for item in inferList{ println(inferList contain item : (item))}需要指出的是这种情况下产生的数组时NSArray的数组。

判断数组是否为空,Swift中数组为空判断可以直接调用isEmpty方法

if inferList.isEmpty { println(inferList为空)}else{ println(inferList不空)}也可以采用数组元素个数进行判断:

if inferList.count == 0 { println(inferList为空)}else{ println(inferList不空)}

三、swift提供两种方法为数组添加元素

第一种:通过调用数组的内嵌方法(append)为数组添加新元素

inferList.append(hello)

第二种:通过加法赋值运算符来为当前数组添加新元素

inferList += [你好]

/*

第二种方法更为强大的是可以进行批量添加,批量添加的数组只能存放一种数据类型

inferList += [红茶,绿,黑茶]

*/

四、修改数组元素

swift中修改数组中元素可以先通过数组名+方括号+下标的方式来获取数组中某个元素的值

如 获取inferList第一个元素

var firseItem = inferList[0]

修改具体元素的值

inferList[0] = egg

Swift提供了批量修改数组元素的功能

inferList[4...6] = [呵呵,嘿嘿]/*这种情况下,4、5元素被修改,6及以后元素被移除,若不移除则inferList[4...6] = [呵呵,哈哈,嘻嘻]*/

五、 为数组插入、移除元素

Swift中通过调用insert(atIndex:)方法在数组的任意指定位置插入一个新的元素

inferList.insert(insertElements, atIndex: 0)

Swift中通过调用removeAtIndex方法移除指定位置元素,其他元素自动前移

inferList.removeAtIndex(0)

第一个位置insertElements被移除

也可以使用removeLast,移除最后一个元素

inferList.removeLast

最后一个元素黑茶被移除

六、数组遍历

在Swift中数组遍历一共有两种方法:

1、通过for in 循环快速遍历数组

for item in inferList { println(item)}

2、通过enumerate全局函数来便利数组,这个函数将会将数组中的元素作为一个类型为(index,value)元祖返回

for (var (index,value)) in enumerate(inferList) { println(item : (index), value : (value))}

篇6:Swift笔试试题及其答案

Swift笔试试题及其答案

事实上,Swift是一种复杂的语言。它包含面向对象和函数方法这两个方面,并且随着新版本的发布在一直进化。

你可以用这些问题来测试应聘者关于Swift方面的知识水平,或者测试一下你自己。如果你不知道答案,没关系,没一个问题下面都有答案供你学习。

这些问题包含两个方面:

笔试问题:通过电子邮件做一个编程测试是极好的,因为这涉及到写大量的代码,从代码质量上可以看出一个人的水平。

面试问题:电话面试或者面对面面试也是很好的,因为对面试者来说口头交流会更方面。

每个方面有分成三个等级:

初级:适合读了一到两本有关Swift的书,并且已经开始用Swift开发应用程序的初学者。

中级:适合那些对Swift语言的概念有深刻理解和强烈兴趣的,并且一直在阅读大量有关Swift的博客文章并进行实践的中级工程师。

高级:适合那些以探索Swift语言知识为乐趣,挑战自己,使用前言技术的人们。

假如你想回答这些问题,我建议你在回答这些问题之前,打开Playground运行一下这些问题的代码。这些问题的答案都在Xcode 7.0 Beta 6 版本中测试过。

准备好了吗?系好安全带,现在就开始!

笔试问题

初学者

问题1、(Swift 1.0及其之后的版本的问题)有什么更好的方法来写下面的for循环?

for var i = 0; i < 5; i++ {

print(“Hello!”)

}

答案:

for _ in 0...4 {

print(“Hello!”)

}

Swift 实现了两个数组运算符closed operator 和 half-operator.前者包含数组中得所有值。例如:下面的例子包含从0到4得所有整数

0...4

half-operator不包含数组中的最后一个元素,下面的.例子会得到的结果和上面的一样:

0..<5

问题2– Swift 1.0 or later

思考下面的问题:

struct Tutorial {

var difficulty: Int = 1

}

var tutorial1 = Tutorial()

var tutorial2 = tutorial1

tutorial2.difficulty = 2

tutorial1.difficulty 和 tutorial2.difficulty的值分别是多少?假如Tutorial是一个类,会有什么不同?并说明原因,

答案:tutorial1.difficulty 的值是1,然而tutorial2.difficulty的值是2.

在Swift中结构体是值类型,他们的值是复制的而不是引用的。下面的一行代码意思是复制了tutorial1的值并把它赋值给tutorial2:

var tutorial2 = tutorial1

从这一行开始,tutorial2值得改变并不影响tutorial1的值。

假如Tutorial是一个类,tutorial1.difficulty和tutorial2.difficulty的值将都会是2.在Swift中类对象都是引用类型。tutorial1属性的任何改变将会反应到tutorial2上,反之亦然。

问题3 – Swift 1.0 or later

view1声明成var类型,view2声明let类型。这里有什么区别吗?下面的最后一行代码能编译吗?

import UIKit

var view1 = UIView()

view1.alpha = 0.5

let view2 = UIView()

view2.alpha = 0.5 // Will this line compile?

答案:view1是个变量可以重新赋值给一个新的实例化的UIView对象。使用let你只赋值一次,所以下面的代码是不能编译的:

view2 = view1 // Error: view2 is immutable

篇7:Swift调用OC和C

Swift文件:main.swift

import Foundation//Swift调用C函数desc1()//Swift调用OC//拿到OC类var funcClass = Root()funcClass.desc2()

OC文件:Root.h

#import@interface Root : NSObject-(void)desc2;@end

Root.m

#import Root.h@implementation Root//求和函数//1、定义函数int sum2(int a, int b){ return a+b;}-(void)desc2{ //2、声明Block int (^p)(int, int); //3、函数指针指向函数 // p = sum2; p = ^(int a, int b) //把函数赋值给Block { return a+b; }; //4、使用 int result = p(10, 40); printf(OC方法输出result:%d, result);}

C函数文件:

Fun.c

#include//求和函数//1、声明函数int sum1(int a, int b){ return a+b;}void desc1(){ //2、声明函数指针 int (*p)(int, int); //3、函数指针指向函数 p = sum1; //4、使用 int result = p(10, 20); printf(C函数输出结果:%d, result);}

桥接文件:工程名称-Bridging-Header.h

//这里面需要导入 桥接的C或OC的头文件//导入C函数void desc1();//导入OC头文件#import Root.h

函数课件

数学教案-函数

二次函数知识点

log是什么函数

函数教学论文

函数单元练习题

高中数学函数知识点

反比例函数测试题

反比例函数教案

二次函数练习题

《swift创建函数(合集7篇).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

点击下载本文文档