小编Jes*_*ssy的帖子

你如何测试函数和闭包是否相等?

书中说"功能和闭包是参考类型".那么,你怎么知道引用是否相等?==和===不起作用.

func a() { }
let å = a
let b = å === å // Could not find an overload for === that accepts the supplied arguments
Run Code Online (Sandbox Code Playgroud)

以下是Catterwauls如何处理这个问题:

MultiClosures和Equatable Closures

测试

closures equality swift

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

在OpenGL ES 2.0/GLSL中,您需要哪些精度说明符?

您填充值的变量是否决定了您正在使用的精度,等号的右侧?

例如,这里的精度说明符是否有任何意义上的区别:

gl_FragColor = lowp vec4(1);
Run Code Online (Sandbox Code Playgroud)

这是另一个例子:

lowp float floaty = 1. * 2.;
floaty = lowp 1. * lowp 2.;
Run Code Online (Sandbox Code Playgroud)

如果你采用一些浮点数,并从它们创建一个向量或矩阵,那么该向量或矩阵是否会采用您填充它的值的精度,或者这些值是否会转换为另一个精度级别?

我认为优化这个最好能回答这个问题:

dot(gl_LightSource[0].position.xyz, gl_NormalMatrix * gl_Normal)
Run Code Online (Sandbox Code Playgroud)

我的意思是,它是否需要走这么远,如果你想尽可能快,或者它有些无用吗?

lowp dot(lowp gl_LightSource[0].position.xyz, lowp gl_NormalMatrix * lowp gl_Normal)
Run Code Online (Sandbox Code Playgroud)

我知道你可以定义float的默认精度,并且这可以用于之后的向量和矩阵.假设为了教育的目的,我们之前已经定义了这个:

precision highp float;
Run Code Online (Sandbox Code Playgroud)

glsl opengl-es-2.0

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

如何在共享框架中为XCTest创建公共扩展?

例如,我从不使用描述XCTestCase.expectation,所以我想使用一个函数为它提供一个默认值,并通过命名使我明白我正在初始化期望,因为你不能真正使用初始化器XCTestExpectation.但是如果扩展不在测试目标中,那么就无法编译:

无法为"XCTest"加载基础模块

import XCTest

public extension XCTestCase {
    func makeExpectation() -> XCTestExpectation {
        return expectation(withDescription: "")
    }
}
Run Code Online (Sandbox Code Playgroud)

xctest swift

13
推荐指数
1
解决办法
555
查看次数

在OpenGL中进行深度测试的Z-fighting解决方案 - 它们如何工作?

描述

我在OpenGL中遇到了Z-Fighting的主要问题,我花了很长时间才找到解决这个问题的方法.我发现的一些,我理解并不喜欢:

  • 移动多边形彼此远离(如OpenGL中的glPolygonOffset)
  • 根据Z坐标划分场景,并使用单独的干净z缓冲区绘制场景的部分.

那些我不明白的:

我已经在我的程序中实现了第二个,只需将它放入球的顶点着色器(它与地面z-fight):

float C = 1.0; 
float far = 2000.0; 
   gl_Position = u_projView * a_position;      
gl_Position.z = 2.0*log(gl_Position.w*C + 1.0)/log(far*C + 1.0) - 1.0;
gl_Position.z *= gl_Position.w;
Run Code Online (Sandbox Code Playgroud)

它工作了!

实际问题

  1. 任何人都可以解释我是如何在顶点着色器中更改顶点的Z坐标解决了问题而没有将顶点明显地移动到我身上?(场景看起来与人眼相同).它是如何改变z深度值的分布的?我猜我错过了一些关于渲染管道的知识.
  2. 任何人都可以向我解释我们如何使用Projection Matrix来解决问题?它是如何工作的?
  3. 是否还有其他类似的有效方法来解决z-fighting问题?

谢谢!

opengl graphics shader rendering glsl

11
推荐指数
1
解决办法
3982
查看次数

是否有一个实际的原因导致List <T> .IndexOf(T)没有返回可为空的int?

如果找到,该方法List<T>.IndexOf()返回整个List中第一次出现的项的从零开始的索引; 否则,-1.

我看到了它之间的平行,以及我刚刚在Code Complete中阅读的内容,它告诉我"避免隐藏含义的变量".

例如:变量pageCount中的值可能表示打印的页数,除非它等于-1,在这种情况下它表示发生了错误.

好吧,我不知道意思是否是"隐藏"的,因为它的记录足够清楚,但是null似乎比-1更好地传达了我的意思,而且.HasValue读取比> -1更好的检查.据我所知,List和Nullable类型都是在C#2.0中引入的,所以我不认为重新调整的原因int与向后兼容性有关.所以,你知道是否有原因,或者这是否是某人忘记实施的东西,我们现在必须永远忍受这个错误?

c# nullable list

9
推荐指数
2
解决办法
577
查看次数

如何实现返回协变Selfs的协议方法?

错误:协议'协议'要求'实例'不能被非最终类('Class')满足,因为它在非参数非结果类型位置使用'Self'

protocol Protocol {
    var instance: Self {get}
}

class Class: Protocol {
    var instance: Class {return Subclass()}
}

class Subclass: Class {}
Run Code Online (Sandbox Code Playgroud)

以下是我在C#中表达我想要的内容.(据我所知,C#没有办法强制通用参数"Self"实际上是我们从Swift中知道的Self,但它的功能很好,因为文档可以让我做正确的事.)

interface Protocol<Self> where Self: Protocol<Self> {
    Self instance {get;}
}

class Class: Protocol<Class> {
    public Class instance {get {return new Subclass();}}
}

class Subclass: Class {}
Run Code Online (Sandbox Code Playgroud)

...在未来版本的Swift中看起来如何:

protocol Protocol {
    typealias FinalSelf: Protocol where FinalSelf.FinalSelf == FinalSelf

    var instance: FinalSelf {get}
}

class Class: Protocol {
    var instance: Class {return Subclass()}
}

class Subclass: Class {} …
Run Code Online (Sandbox Code Playgroud)

inheritance protocols swift

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

如何通过DiffableDataSource更新Section中的页脚而不会造成闪烁效果?

一个部分可能包含 1 个页眉、许多内容项和 1 个页脚。

对于DiffableDataSource,网上的大部分例子,都是enum用来表示Section的。例如

func applySnapshot(_ animatingDifferences: Bool) {
    var snapshot = Snapshot()
    
    snapshot.appendSections([.MainAsEnum])

    snapshot.appendItems(filteredTabInfos, toSection: .MainAsEnum)

    dataSource?.apply(snapshot, animatingDifferences: animatingDifferences)
}
Run Code Online (Sandbox Code Playgroud)

但是,当 Section 有动态内容页脚时,我们可能需要使用 struct 来表示 Section。例如

import Foundation

struct TabInfoSection {

    // Do not include content items [TabInfo] as member of Section. If not, any mutable 
    // operation performed on content items, will misguide Diff framework to throw 
    // away entire current Section, and replace it with new Section. This causes 
    // flickering …
Run Code Online (Sandbox Code Playgroud)

ios swift diffabledatasource

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

为什么glBindRenderbuffer和glRenderbufferStorage都采用"目标"参数?

它需要一个目标参数,但唯一可行的目标是GL_RENDERBUFFER.

http://www.opengl.org/wiki/Renderbuffer_Object

https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBindRenderbuffer.xml

http://www.opengl.org/wiki/GlRenderbufferStorage

(我刚学习OpenGL,今天已经发现了这两个;也许我可以期待这个看似无用的目标参数在许多函数中都很常见?)

opengl opengl-es

3
推荐指数
1
解决办法
810
查看次数

如何为UIPageViewControllerDataSource提供默认实现?

我认为这个问题的答案一般会解决Objective-C协议的问题,但这是我遇到的第一个这类问题.

我期望在实现UIPageViewControllerDataSourceWithConnections时使用这些方法.

import UIKit

protocol UIPageViewControllerDataSourceWithConnections: UIPageViewControllerDataSource {
    var connectedViewControllers: [UIViewController] {get}
}

extension UIPageViewControllerDataSourceWithConnections {
    func pageViewController(pageViewController: UIPageViewController,
        viewControllerBeforeViewController viewController: UIViewController
    ) -> UIViewController? {return connectedViewController(
        current: viewController,
        adjustIndex: -
    )}

    func pageViewController(pageViewController: UIPageViewController,
        viewControllerAfterViewController viewController: UIViewController
    ) -> UIViewController? {return connectedViewController(
        current: viewController,
        adjustIndex: +
    )}

    private func connectedViewController(
        current viewController: UIViewController,
        adjustIndex: (Int, Int) -> Int
    ) -> UIViewController? {
        let requestedIndex = adjustIndex(connectedViewControllers.indexOf(viewController)!, 1)
        return connectedViewControllers.indices.contains(requestedIndex) ?
            connectedViewControllers[requestedIndex] : nil
    }

    func presentationCountForPageViewController(pageViewController: UIPageViewController) …
Run Code Online (Sandbox Code Playgroud)

protocols default-implementation uipageviewcontroller swift

3
推荐指数
1
解决办法
616
查看次数

是否可以垂直翻转 SwiftUI 视图?

看起来您可以使用UIView颠倒旋转视图,但我找不到任何说明可以使用 SwiftUI 视图执行相同操作的内容。

任何帮助将不胜感激 :)

swiftui

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