小编avi*_*ara的帖子

?? Swift中的运算符

在"The Swift Programming Language"一书(第599页)中,我遇到了这段令我困惑的代码片段.它是这样的:

func buyFavoriteSnack(person:String) throws {
    let snackName = favoriteSnacks[person] ?? "Candy Bar"
    try vend(itemName:snackName)
}
Run Code Online (Sandbox Code Playgroud)

它的解释是:

buyFavoriteSnack(_ :)函数查找给定人最喜欢的零食,并尝试为他们购买.如果他们没有列出最喜欢的零食,它会尝试买一个糖果棒.如果他们...

这个解释如何映射到"??" 给定代码中的运算符.什么时候应该/我们可以在自己的代码中使用这种语法吗?

ios swift

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

Swift中泛型和AnyObject之间的区别

考虑这个myFilter函数,它接受泛型参数并根据谓词过滤数组.这与filter()Swift提供的功能相同.

func myFilter<T>(source: [T], predicate:(T) -> Bool) -> [T] {
  var result = [T]()
  for i in source {
    if predicate(i) {
      result.append(i)
    }
  }
  return result
}
Run Code Online (Sandbox Code Playgroud)

这有什么不同,

func myFilter(source: [AnyObject], predicate:(AnyObject) -> Bool) -> [AnyObject] {
  var result = [AnyObject]()
  for i in source {
    if predicate(i) {
      result.append(i)
    }
  }
  return result
}
Run Code Online (Sandbox Code Playgroud)

即使在后一个例子中,我们也不是达到了泛型的地步吗?

functional-programming ios swift

42
推荐指数
2
解决办法
4390
查看次数

Swift合同设计

Swift是否提供本地设计合同支持?我知道它可以在运行时通过断言完成,但它可以在编译期间完成吗?或者,有没有外部插件/库这样做?

编辑

通过说"在编译期间按合同设计",我并不是说库是C#所有功能强大的静态分析器.如果它类似于iContract为Java提供的东西,那对我来说已经足够了.我们来看一个例子:

使用iContract在Java中进行平方根评估的DBC代码可以写成:

/** 
 * @pre f >= 0.0
 * @post Math.abs((return * return) - f) < 0.001 
 */ 
public float sqrt(float f) { ... } 
Run Code Online (Sandbox Code Playgroud)

现在,这使我的合同成为我的API规范的一部分而不是其实现的一部分,我认为这是一种更清洁的方式.呼叫者将知道他的职责是什么,被呼叫者正在设定其期望,所有这些都是更清晰的方式.我们在Swift中有这样的东西吗?

design-by-contract ios swift

18
推荐指数
1
解决办法
1579
查看次数

将嵌套的Class <MyInterface <T >>作为Android中的参数传递

我正在尝试创建一个包装器Retrofit来抽象我的服务实现.到目前为止,我已经成功编译了编译器:

package com.example.spark.testapp.services;

import com.example.spark.testapp.services.apis.Get;
import com.example.spark.testapp.services.apis.Post;
import com.example.spark.testapp.services.utils.*;
import com.example.spark.testapp.services.utils.Error;

import java.util.List;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;




public class ServiceLayer {
    public <T> void performGet(String url, final Class<Get<T>> clazz, com.example.spark.testapp.services.utils.Callback<T> callback) {
        Retrofit retrofit = new Retrofit.Builder().baseUrl("").build();
        Get<T> service = retrofit.create(clazz);
        //Pass authentication token here
        Call<T> t = service.get(url, "");
        executeCallback(callback,t);
    }

    public <T> void performPost(String url, final Class<Post<T>> clazz,com.example.spark.testapp.services.utils.Callback<T> callback) {
        Retrofit retrofit = new Retrofit.Builder().baseUrl("").build();
        Post<T> service = retrofit.create(clazz);

        //Pass authentication token …
Run Code Online (Sandbox Code Playgroud)

java generics android

15
推荐指数
1
解决办法
1332
查看次数

在XCTestCase子类中使用泛型是否有效?

我有一个XCTestCase看起来像这样的子类.我已删除setup(),并tearDown为简洁的方法:

class ViewControllerTests <T : UIViewController>: XCTestCase {
    var viewController : T!

    final func loadControllerWithNibName(string:String) {
        viewController  = T(nibName: string, bundle: NSBundle(forClass: ViewControllerTests.self)) 
        if #available(iOS 9.0, *) {
            viewController.loadViewIfNeeded()
        } else {
            viewController.view.alpha = 1
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它的子类看起来像这样:

class WelcomeViewControllerTests : ViewControllerTests<WelcomeViewController> {
    override func setUp() {
        super.setUp()
        self.loadControllerWithNibName("welcomeViewController")
        // Put setup code here. This method is called before the invocation of each test method in the class.
    }

    func testName() {
       let …
Run Code Online (Sandbox Code Playgroud)

generics ios xctest swift

13
推荐指数
2
解决办法
867
查看次数

Java中有趣的线程行为

我在Java中学习了多线程的概念,在那里我遇到了这个非常有趣的行为.我正在尝试各种创建线程的方法.现在问的是我们在扩展a Thread而不是实现Runnable接口的时候.

在旁注中,我知道它实现Runnable接口而不是扩展Thread类是完美的OO意义,但是出于这个问题的目的,让我们说我们扩展了Thread类.

t我的扩展Thread类的实例,我有一个代码块在后台执行,写在我run()Thread类的方法中.

它完全在后台运行t.start(),但我有点好奇并称之为t.run()方法.在主线程中执行的代码片段!

t.start()t.run()不是做什么的?

java multithreading

5
推荐指数
1
解决办法
340
查看次数

斯威夫特的传感器

我正在通过Haskell学习Swift中的函数式编程,并遇到了这个有趣的Transducers概念.一个代码示例实现了一个mapping基本上吐出传感器的函数,因为我们将转换规则作为参数传递.

灵感,我很快将其翻译成Swift等价物,这就是我得到的:

func mapping < A, B, C> (f: A -> B) -> ( ( (C,B) -> C) -> ( (C,A) -> C) ) {
    return { r in
        return { result, a in
            return r(result,f(a))

        }

    }
}
Run Code Online (Sandbox Code Playgroud)

我现在的问题是注意转换函数如何从A转到B((A -> B)),但是转换器从B转到A(( (C,B) -> C) -> ( (C,A) -> C))?这是为什么?我确信这不是巧合,因为这个顺序很重要.哈斯克尔专家,有人吗?

haskell functional-programming swift

5
推荐指数
1
解决办法
371
查看次数

如何在Swift中对两种类型进行协议扩展约束

我有一个协议及其相应的扩展,看起来像这样:

import Foundation


protocol HelpActionManageable {
    typealias ItemType : UIViewController,HelpViewControllerDelegate
    var viewController : ItemType {
        get
    }
}

extension HelpActionManageable  {
    func presentHelpViewController() {
        let helpViewController = HelpViewController(nibName: HelpViewController.nibName(), bundle: nil)
        viewController.presentViewController(helpViewController, animated: true, completion:nil)
        helpViewController.delegate = viewController
    }
    func dismissSuccessfulHelpViewController(helpViewController:HelpViewController) {
        helpViewController.dismissViewControllerAnimated(true) { () -> Void  in
            self.viewController.showAlertControllerWithTitle(GlobalConstants.Strings.SUCCESS, message: GlobalConstants.Strings.VALUABLE_FEEDBACK, actions: [], dismissingActionTitle: GlobalConstants.Strings.OK, dismissBlock: nil)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,在随机视图控制器中确认了这个协议,我做的是这样的:

class RandomViewController : UIViewController, HelpViewControllerDelegate,HelpActionManageable {
    //HelpViewControllerDelegate methods...
    var viewController : RandomViewController {
        return self
    }
}
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,但如果扩展HelpActionManageable …

ios swift

5
推荐指数
1
解决办法
619
查看次数

为什么 Swift 的 fatalError 参数是 @autoclosure?

我在 Swift 中探索发现它fatalError有这个签名:

@noreturn public func fatalError(@autoclosure message: () -> String = default, file: StaticString = #file, line: UInt = #line)
Run Code Online (Sandbox Code Playgroud)

为什么这样定义这个函数有什么具体原因吗?出什么问题了 :

@noreturn public func fatalError(message:String = default, file: StaticString = #file, line: UInt = #line) {
    //Termination code
}
Run Code Online (Sandbox Code Playgroud)

请注意,我了解@autoclosure其工作原理,并且这个问题与它的用法无关;但关于可以使用这种模式的用例。

swift

5
推荐指数
1
解决办法
143
查看次数

在 Android 中设置 jpeg 文件的 DPI 元信息

在我正在编写的 Android 应用程序中,我有一个文档图像 ( jpeg ),该图像正在上传到识别该文档并向我发送回相关详细信息的服务器。虽然一切都很好,但服务器中的代码希望我设置“图像 DPI”元信息,如 mac 中所示,

图像元信息的屏幕截图

上面的屏幕截图中显示的“图像 DPI”并不完全是它的值。我写了一个计算 dpi 值的方法。如何将如此计算的 dpi 值设置为jpeg的元信息?我已经能够在应用程序的 iOS 版本中设置这个特定的元信息,但在 Android 中,两天的不懈尝试让我的任务徒劳无功。

我确实知道ExifInterface,但我很不幸地使用了它的setAttribute(String key,String value)方法。(键应该是什么?值应该是什么?如何设置单位?我应该设置单位吗?)。

我还看到了与 Java 相关的解决方案,建议使用javax.imageio.*Android 根本不可用的包。

有人遇到过这样的问题吗?我该如何继续讨论这个问题?

java android jpeg metadata

2
推荐指数
1
解决办法
1323
查看次数

J语言的熵公式

我正在使用 J 编程语言,我尝试创建一个动词,用于从概率列表中计算熵(事件的结果,公式在 python/pesudocode: 中是这样的-sum([p*log(p,2) for p in ps]))。

我尝试使用组合 ( @:)的版本有效,但基于hook & fork 的版本似乎在做其他事情,我关心它为什么这样做。我正在尝试使用hookfork 进行工作,这个案例确实证明我的直觉是错误的。

这是代码:

   probs =: 0.75 0.25    NB. probabilties
   entropy =: +/ @: (- * 2&^.)
   entropyWrong =: +/ (- * 2&^.)
   entropy probs         NB. this is correct
0.811278
   entropyWrong probs    NB. this is wrong!
 1.06128 1.25
0.561278 0.75
   NB. shouldn't the following be the same as above (wrong)?
   +/ (- * 2&^.) probs
0.811278 …
Run Code Online (Sandbox Code Playgroud)

hook fork entropy j

2
推荐指数
1
解决办法
147
查看次数