小编zvw*_*iss的帖子

斯威夫特的单身人士

我一直在尝试实现一个单例用作照片的缓存,我从网上上传到我的iOS应用程序.我在下面的代码中附加了三个变体.我试图让变量2工作,但它导致编译器错误,我不明白,并希望得到帮助我做错了什么.变体1执行缓存但我不喜欢使用全局变量.变体3没有进行实际的缓存,我相信这是因为我在var ic = ....的赋值中得到了一个副本,这是正确的吗?

任何反馈和见解将不胜感激.

谢谢,Zvi

import UIKit

private var imageCache: [String: UIImage?] = [String : UIImage?]()

class ImageCache {
    class var imageCache: [String : UIImage?] {
        struct Static {
            static var instance: [String : UIImage?]?
            static var token: dispatch_once_t = 0
        }

        dispatch_once(&Static.token) {
            Static.instance = [String : UIImage?]()
        }
        return Static.instance!
    }
}

class ViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        imageView.image = UIImage(data: NSData(contentsOfURL: NSURL(string: "http://images.apple.com/v/iphone-5s/gallery/a/images/download/photo_1.jpg")!)!)

        //variant 1 - this code …
Run Code Online (Sandbox Code Playgroud)

singleton swift

12
推荐指数
1
解决办法
1万
查看次数

Swift 中的泛型和函数式编程

下面 sum 函数的两个变体是我尝试用 Swift 重复 Abelson 和 Sussman 在经典的《计算机程序的结构和解释》一书中介绍的 lisp 版本。第一个版本用于计算某个范围内的整数之和,或某个范围内的整数的平方和,第二个版本用于计算 pi/8 的近似值。

我无法将这些版本组合成一个可以处理所有类型的函数。有没有一种巧妙的方法来使用泛型或其他一些 Swift 语言功能来组合变体?

func sum(term: (Int) -> Int, a: Int, next: (Int) -> Int, b: Int) -> Int {
    if a > b {
        return 0
    }
    return (term(a) + sum(term, next(a), next, b))
}

func sum(term: (Int) -> Float, a: Int, next: (Int) -> Int, b: Int) -> Float {
    if a > b {
        return 0
    }
    return (term(a) + sum(term, next(a), next, b))
} …
Run Code Online (Sandbox Code Playgroud)

generics functional-programming swift

4
推荐指数
1
解决办法
550
查看次数