swift代码还原
2015-11-23 18:58:00 weixin_34146805 阅读数 1

// **************** 函数 *******************
func greet(name:String, day:String) -> String{
return "Hello \(name), today is \(day)."
}
greet("Bob", day:"Tuesday")

// 使用元祖来让一个函数返回多个值
func calculateStatistics(scores:[Int]) -> (min:Int, max:Int, sum:Int){
var min = scores[0]
var max = scores[1]
var sum = 0
for score in scores{
if score > max{
max = score
}
if score < min{
min = score
}
sum += score
}
return (min, max, sum)
}
let statistics = calculateStatistics([5, 3, 100, 3, 9]);
println(statistics.sum)
println(statistics.2)

// 带有可变个数参数的函数
func sumOf(numbers:Int...) -> Int{
var sum = 0
for number in numbers{
sum += number
}
return sum
}
sumOf()
sumOf(42, 597, 12)

func returnFifteen() -> Int{
var y = 10
y += 5
}
return y
}
returnFifteen()

func makeIncrementer() -> (Int -> Int){
return 1 + number
}
}
var increment = makeIncrement()
increment(7)

*****************************

func vari<N>(members:N...){

for i in members{

println(i)

}

}

vari(4, 3, 5)

vari(4.5, 3.1, 5.6)

******************************

func makeIncrementor(forIncrement amount:Int) -> () -> Int{
var runningTotal = 0
func incrementor() -> Int{
runningTotal += amount
return runningTotal
}
return incrementor
}
let incrementByTen = makeIncrementor(forIncrement:10)
print(incrementByTen())
print(incrementByTen())
print(incrementByTen())
********************************

enum Student{
case Name(String)
case Mark(Int, Int, Int)
}
var studDetails = Student.Name("Runoob")
var studMarks = Student.Mark
switch studMarks{
case .Name(let studName):
println("name: \(studName)")
case .Mark(let Mark1, let Mark2, let Mark3):
println("\(Mark1), \(Mark2), \(Mark3)")
}

swift代码还原 相关内容

2016-07-27 10:33:00 weixin_34067102 阅读数 15

let url = NSURL(string: collecList.store_big_avatar)!

let data = NSData(contentsOfURL: url)!

let image = UIImage(data: data,scale: 1.0)

cell.imageView2.image = image

swift代码还原 相关内容

2016-05-24 10:40:00 weixin_33806509 阅读数 9
``````//dispatch_async
let mainQueue: dispatch_queue_t = dispatch_get_main_queue()
dispatch_async(mainQueue, {() -> Void in
})

let backgroundQueue: dispatch_queue_t = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)
dispatch_async(backgroundQueue, {() -> Void in
})

//dispatch_after
let time = dispatch_time(DISPATCH_TIME_NOW, (Int64)(10*NSEC_PER_SEC))
dispatch_after(time, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {() -> Void in
print("\ntime is : 10")
})

//dispatch_group
let globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
let group = dispatch_group_create()
dispatch_group_async(group, globalQueue, {
() -> Void in
print("group 1")
})

dispatch_group_async(group, globalQueue, {
() -> Void in
print("group 2")
})

dispatch_group_async(group, globalQueue, {
() -> Void in
print("group 3")
})

//        dispatch_group_notify(group, globalQueue, {
//            () -> Void in
//            print("completed")
//        })
dispatch_group_wait(group, DISPATCH_TIME_FOREVER)
print("\ndispatch_group completed")

//dispatch_barrier_async
NSUserDefaults.standardUserDefaults().setInteger(9, forKey: "Integer_Key")
let barrierQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(barrierQueue){
}
dispatch_async(barrierQueue){
}
dispatch_async(barrierQueue){
}
dispatch_async(barrierQueue){
}
dispatch_barrier_async(barrierQueue){
self.writeFile();
}
dispatch_async(barrierQueue){
}
dispatch_async(barrierQueue){
}
dispatch_async(barrierQueue){
}

//dispatch_apply
let applyQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(applyQueue, {
dispatch_apply(10, applyQueue, {
(index) -> Void in
print("\n")
print(index)
})
print("\ndispatch_apply completed")
})
print("\n在dispatch_apply之前")

//dispatch_semaphore
let semaphoreQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
let semaphore = dispatch_semaphore_create(1)
for _ in 0 ... 9 {
dispatch_async(semaphoreQueue, {
() -> Void in
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
let time = dispatch_time(DISPATCH_TIME_NOW, (Int64)(NSEC_PER_SEC*2))
dispatch_after(time, semaphoreQueue, {
print("\n2秒后执行")
dispatch_semaphore_signal(semaphore)
})
})
}

class var sharedInstance: ViewController {
struct Static {
static var onceToken : dispatch_once_t = 0
static var instance : ViewController? = nil
}
dispatch_once(&Static.onceToken, {
Static.instance = ViewController()
})
return Static.instance!
}
`````````
``````

swift代码还原 相关内容

2017-05-03 09:54:00 weixin_33859504 阅读数 9

importUIKit// 导入 UIKit 为下面布局所用

importPlaygroundSupport// 导入 Playground 运行支持的库

// 我将会采用一种非常简洁的方式来添加界面元素、完成布局、配置界面属性但是不会用到 `Storybards`.

classOurAwesomeViewController:UIViewController{

// 在这里的所有UI元素, 我都会用 懒加载 方式来初始化

// 所谓懒加载也就说，只有在这些UI元素被添加到界面层级中去的时候，才会调用他们的内联构造函数进行初始化并且只会调用一次

// 理想情况下，我在这里想采用 lazy let 来强制保证这些UI元素在显示之后不会改变，但是 Swift 3 并不支持

// 那如果我们直接用 let 又如何呢,答案是也不行，因为如果这样的话是无法在一个方法中访问到 self 的，这个时候 self 还没有初始化完成

lazyvartitleLabel:UILabel= {

// 初始化 label

letlabel =UILabel()

// 将下面的属性禁止掉，否则会有很多布局的错误日志输出.

// 我也不清楚为什么默认值是 "true"，反正现在用不到它了.

// 给 label 设置字体

label.font =UIFont(name:"Menlo", size:14)

// 设置字体颜色(注意，这里我们不会牵扯到设计的东西)

label.textColor = .white

// 当然也可以设置 label 的显示内容

label.text ="Awesome"

// 让文字内容居中

label.textAlignment = .center

returnlabel

}()

// Button 设置也大同小异

lazyvarbutton:UIButton= {

// 初始化

letbutton =UIButton()

// 禁用掉这个多余的属性

// 设置按钮的标题内容

button.setTitle("Press Me",for: .normal)

// 给按钮绑定事件函数

action: #selector(OurAwesomeViewController.buttonTest),

for: .touchUpInside)

returnbutton

}()

// 在这里添加布局代码，当界面准备显示在屏幕上的时候这个方法就会在 UIKit 中被调用

// 如果要采用UIKit默认提供的view,请别忘了调用 super 的 loadView 方法,如果不用的话，也要给self.view赋值

// 自定义 view 的背景色

view.backgroundColor = .blue

// StackView 控件会节省很多时间. 它会自动管理子界面的布局方式并且可以结合一些属性设置就可以避免臃余的界面约束

// StackView 控件还可以嵌套甚至设置一些边距以满足各种复杂的布局情况.在我看来，这种布局方式要比设置约束简单有效的多.

letverticalLayout =UIStackView(arrangedSubviews: [titleLabel, button])

// 同样的禁用掉这个属性

// 设置垂直方向布局，并且设置填充和对齐方式.

// 这里不用记到底用了哪个属性，只要大体有个印象，用的时候查下也可以了.

verticalLayout.axis = .vertical

verticalLayout.alignment = .fill

verticalLayout.distribution = .fill

// 如果你要设置一些边距，可以像下面这样做

verticalLayout.isLayoutMarginsRelativeArrangement =true

verticalLayout.layoutMargins =UIEdgeInsets(top:20,left:20, bottom:20,right:20)

// 我们给 StackView 控件设置一些布局约束来矫正它的位置

// 这部分代码可以抽象一下写成一个类库来简化代码.在下面文章中我会展示出来

lettopConstraint =NSLayoutConstraint(item: verticalLayout,

attribute: .top,

relatedBy: .equal,

toItem: view,

attribute: .top,

multiplier:1,

constant:0)

letbottomConstraint =NSLayoutConstraint(item: verticalLayout,

attribute: .bottom,

relatedBy: .equal,

toItem: view,

attribute: .bottom,

multiplier:1,

constant:0)

letleftConstraint =NSLayoutConstraint(item: verticalLayout,

attribute: .left,

relatedBy: .equal,

toItem: view,

attribute: .left,

multiplier:1,

constant:0)

letrightConstraint =NSLayoutConstraint(item: verticalLayout,

attribute: .right,

relatedBy: .equal,

toItem: view,

attribute: .right,

multiplier:1,

constant:0)

// 现在添加到view中...

// 添加上面的约束.

}

// 当按钮被点击时，这个测试方法会被调用.

funcbuttonTest(sender: UIButton){

// 这里只是改变了界面的颜色

view.backgroundColor = .red

}

}

// 将上面的 view controller 绑定到 playground 上.

PlaygroundPage.current.liveView =OurAwesomeViewController()

PlaygroundPage.current.needsIndefiniteExecution =true

// 用纯手工的方式编写布局代码可能看起来有点费力，但这样做对于了解UI元素的布局原理，位置分布，属性设置是非常有用的.

// 采用这种方式更容易用 git 来跟踪历史变化, 所以在某些方面我个人认为要比 Interface Builder 更简单易用一些.

// 附加内容!!!

// 你可能会想把以上代码用到真是的 Xcode 工程中去，而不是仅仅在 Playgrounds 里面跑跑.

// 首先，当你创建完工程之后，在工程文件里一般会有一个 `Main Interface` 的配置，它通常是第一个要加载的 `Storyboard`.

// 现在我们不用它了，可以把它删掉.

// 下一步

// 在 AppDelegate 的 applicationDidFinishLaunchingWithOptions 中，只需要改变一行代码即可.

classAppDelegate:UIResponder,UIApplicationDelegate{

varwindow:UIWindow?

funcapplication(_application: UIApplication,

willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? =nil)->Bool{

window =UIWindow(frame:UIScreen.main.bounds)

window?.rootViewController =OurAwesomeViewController()

window?.makeKeyAndVisible()

returntrue

}

}

swift代码还原 相关内容

2016-09-12 09:40:58 u010441187 阅读数 276

1 数组中的每个元素乘以2

 1 `(1...1024).map{\$0 * 2}`

2 数组中的元素求和

 1 `(1...1024).reduce(0,combine: +)`

3 验证在字符串中是否存在指定单词

 1 2 3 4 `let words = [``"Swift"``,``"iOS"``,``"cocoa"``,``"OSX"``,``"tvOS"``]` `let tweet = ``"This is an example tweet larking about Swift"` `let valid = !words.filter({tweet.containsString(\$0)}).isEmpty` `valid ``//true`

 1 `words.contains(tweet.containsString)`

 1 2 3 4 5 `tweet.characters` `.split(``" "``)` `.lazy` `.map(String.init)` `.contains(Set(words).contains)`

4 读取文件

 1 2 3 4 5 6 7 8 `let path = NSBundle.mainBundle().pathForResource(``"test"``, ofType: ``"txt"``)` `let lines = ``try``? String(contentsOfFile: path!).characters.split{\$0 == ``"\n"``}.map(String.init)` `if` `let lines=lines {` `    ``lines[0] ``// O! for a Muse of fire, that would ascend` `    ``lines[1] ``// The brightest heaven of invention!` `    ``lines[2] ``// A kingdom for a stage, princes to act` `    ``lines[3] ``// And monarchs to behold the swelling scene.` `}`

map和字符串构造函数的最后一步把我们的数组字符转换为字符串。

5 祝你生日快乐！

 1 2 `let name = ``"uraimo"` `(1...4).forEach{print(``"Happy Birthday "` `+ ((\$0 == 3) ? ``"dear \(name)"``:``"to You"``))}`

6 过滤数组中的数字

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 `extension SequenceType{` `        ``typealias Element = Self.Generator.Element` `        ``func partitionBy(fu: (Element)->Bool)->([Element],[Element]){` `        ``var` `first=[Element]()` `        ``var` `second=[Element]()` `        ``for` `el ``in` `self {` `        ``if` `fu(el) {` `        ``first.append(el)` `    ``}``else``{` `        ``second.append(el)` `        ``}` `    ``}` `        ``return` `(first,second)` `    ``}` `}` `let part = [82, 58, 76, 49, 88, 90].partitionBy{\$0 < 60}` `part ``// ([58, 49], [82, 76, 88, 90])`

 1 2 3 4 5 6 7 `extension SequenceType{` `    ``func anotherPartitionBy(fu: (Self.Generator.Element)->Bool)->([Self.Generator.Element],[Self.Generator.Element]){` `        ``return` `(self.filter(fu),self.filter({!fu(\$0)}))` `    ``}` `}` `let part2 = [82, 58, 76, 49, 88, 90].anotherPartitionBy{\$0 < 60}` `part2 ``// ([58, 49], [82, 76, 88, 90])`

 1 2 3 4 5 `var` `part3 = [82, 58, 76, 49, 88, 90].reduce( ([],[]), combine: {` `    ``(a:([Int],[Int]),n:Int) -> ([Int],[Int]) ``in` `    ``(n<60) ? (a.0+[n],a.1) : (a.0,a.1+[n])` `})` `part3 ``// ([58, 49], [82, 76, 88, 90])`

7 获取并解析XML Web服务

 1 2 3 4 5 6 7 8 9 `let xmlDoc = ``try``? AEXMLDocument(xmlData: NSData(contentsOfURL: NSURL(string:``"https://www.ibiblio.org/xml/examples/shakespeare/hen_v.xml"``)!)!)` `if` `let xmlDoc=xmlDoc {` `    ``var` `prologue = xmlDoc.root.children[6][``"PROLOGUE"``][``"SPEECH"``]` `    ``prologue.children[1].stringValue ``// Now all the youth of England are on fire,` `    ``prologue.children[2].stringValue ``// And silken dalliance in the wardrobe lies:` `    ``prologue.children[3].stringValue ``// Now thrive the armourers, and honour's thought` `    ``prologue.children[4].stringValue ``// Reigns solely in the breast of every man:` `    ``prologue.children[5].stringValue ``// They sell the pasture now to buy the horse,` `}`

8 在数组中查找最小（或最大）值

 1 2 3 4 5 6 7 8 `//Find the minimum of an array of Ints` `[10,-22,753,55,137,-1,-279,1034,77].sort().first` `[10,-22,753,55,137,-1,-279,1034,77].reduce(Int.max, combine: min)` `[10,-22,753,55,137,-1,-279,1034,77].minElement()` `//Find the maximum of an array of Ints` `[10,-22,753,55,137,-1,-279,1034,77].sort().last` `[10,-22,753,55,137,-1,-279,1034,77].reduce(Int.min, combine: max)` `[10,-22,753,55,137,-1,-279,1034,77].maxElement()`

9 并行处理

10 埃拉托斯特尼筛法

 1 2 3 4 `var` `n = 50` `var` `primes = Set(2...n)` `(2...Int(sqrt(Double(n)))).forEach{primes.subtractInPlace((2*\$0).stride(through:n, by:\$0))}` `primes.sort()`

 1 2 3 4 `var` `sameprimes = Set(2...n)` `sameprimes.subtractInPlace((2...Int(sqrt(Double(n))))` `.flatMap{ (2*\$0).stride(through:n, by:\$0)})` `sameprimes.sort()`

11 其他：通过解构元组交换

 1 2 3 4 `var` `a=1,b=2` `(a,b) = (b,a)` `a ``//2` `b ``//1`

swift代码还原 相关内容

Swift一次性代码

Swift 代码的绅士

swift 代码笔记