小编Max*_*kov的帖子

Objective C中的循环依赖解决方法

我有一个像这样定义的协议:

@protocol Container

- (BOOL)putStuff: (Stuff *) theStuff;

@end
Run Code Online (Sandbox Code Playgroud)

以及以下声明的类:

@interface Stuff : NSObject {

}

@property(readwrite,nonatomic,retain) NSObject <Container> * containerHoldingMe;

@end
Run Code Online (Sandbox Code Playgroud)

我在putStuff声明中得到一个错误 - "预期类型".但是,如果我将方法的参数更改为NSObject,它编译正常 - 所以,我认为Objective C不允许循环依赖.

在我正在工作的实际课程中,我想实现两个 - 但是,如何在没有它的情况下实现这样的逻辑?

containers objective-c circular-dependency

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

检查对象是否可以转换为特定值类型?

我有一个Hashtable,其中包含解析某个JSON的结果:decodedJson.decodedJson["key"]可以是int,double,float,decimal或string.我需要将它转换为十进制,如果它是一个数字(我计划用它(decimal)decodedJson["key"]),或者如果不是则处理错误.

什么是最有效的方法来确定?

c#

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

无法访问同一基类的受保护成员

我有这样的事情:

class Node
{
    protected Node Parent
    {
        get; private set;
    }
}

class NodeDerived : Node
{
    void SomeMethod()
    {
        Node parentIterator = this.Parent;

        while (parentIterator != null)
        {
            // ... some logic

            parentIterator = parentIterator.Parent; // Here's the error
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但由于一些奇怪的原因,我无法访问parentIterator.Parent属性:

error CS1540: Cannot access protected member `Node.Parent' via a qualifier of type `Node'. The qualifier must be of type `NodeChild' or derived from it
Run Code Online (Sandbox Code Playgroud)

为什么会这样?顺便说一句,我还发现,虽然我可以访问this.Parent,但我无法访问((Node) this).Parent.

c# mono access-modifiers

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

C# - 如何确保静态方法直接影响其参数而不仅仅是实例?

我有2个静态方法,只有一个做了我想做的事情,我无法弄清楚另一个有什么问题.更具体地说,Method_A似乎不生成其参数的实例,并且在main中创建的同一变量上运行,而B似乎在实例上运行.

public static Method_A(Vector2[] in, int n)
{
     for(int i = 0; i < in.Length; i++)
     {
          in[i].x = n;
          in[i].y = n;
     }
}

public static Method_B(Vector2 in, int n)
{
     in.x = n;
     in.y = n;
}
Run Code Online (Sandbox Code Playgroud)

然后从主要:

// This works, and changes values directly in "test"
Vector2[] test = meshFilter.uv;
Method_A(test, n);
meshFilter.uv = test;

// This FAILS, doesn't affect test
Vector2 test = meshFilter.uv[i];
Method_B(test, n);
meshFilter.uv[i] = test;

// This also FAILS, doesn't affect test …
Run Code Online (Sandbox Code Playgroud)

c# unity-game-engine

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

如何从函数参数类型中省略第一个参数?

我有一个sendMessage来自第三方库的函数,带有参数:

function sendMessage(chatId: number | string, text: string, extra?: tt.ExtraEditMessage)
Run Code Online (Sandbox Code Playgroud)

我想创建另一个函数来向特定用户发送消息。我希望这个函数具有原始函数的所有参数:

export async function sendMessageToAdmin(text: string, extra?: tt.ExtraEditMessage)
Run Code Online (Sandbox Code Playgroud)

但我希望此类型声明是 DRY 的,并在更新第三方依赖项时自动更新,因此我可以使用Parameters实用程序类型:

type SendMessageParameters = Parameters<sendMessage>

export async function sendMessageToAdmin(...parameters: SendMessageParameters)
Run Code Online (Sandbox Code Playgroud)

但是,我还想省略第一个参数 ,chatId因为我将自行设置它。不幸的是,Omit实用程序类型仅适用于属性,不适用于元组成员。

如何构造一个类型,该类型将具有函数的所有参数,而不是第一个参数或具有特定名称的参数?

typescript

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

如何在iOS上的Unity3d中获得大量"免费"内存?

我有一个问题:如果我尝试使用Texture2D.ReadPixels创建屏幕截图,游戏会在某些设备上崩溃(最值得注意的是,iPod 4G).据说,它是因为内存不足而发生的.在创建屏幕截图之前,我想检测一下,如果我可以安全地分配所需的内存量,并且如果我想我会崩溃就向玩家显示警告.

但是,似乎纹理之类的资源是在Mono VM之外进行管理的.当我有大约16mb的地图集时,System.GC.GetTotalMemory返回9mb.所以,似乎我必须为此编写一个插件.

(有一节描述我没有收到低内存警告,但似乎我错了,在Objective-C级别,警告成功提出).

如何在不崩溃的情况下获得可以分配的"免费"内存量?可能有其他方法来实现我想要的功能吗?

c# objective-c unity-game-engine ios

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

为什么在Doom 3源中有断言(sizeof(bool)== 1)?

这是断言.在什么样的合理情况下它会失败,为什么游戏会检查呢?

c++ assert sizeof

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

带有grunt的Nodeunit找不到模块'tap'

因此,在本教程的帮助下,我决定在我的node.js应用程序中添加一些单元测试.我的gruntfile似乎没问题,当我输入grunt nodeunit我的唯一测试运行就好了,但在那之后,它崩溃了错误Fatal error: Cannot find module 'tap':

$> grunt nodeunit
Running "nodeunit:all" (nodeunit) task
Testing db.test.js
.OK
Fatal error: Cannot find module 'tap'
Run Code Online (Sandbox Code Playgroud)

我对这个模块一无所知,但是在搞砸之后,似乎这是nodeunit需要的东西.事实上,它$MY_NODE_APP/node_modules/nodeunit/node_modules/tap存在:存在,当我启动节点$MY_NODE_APP/node_modules/nodeunit并输入require('tap')交互式控制台时,我得到一些带有很多东西的对象,这给我的印象是它应该正常工作.

所以,显而易见的问题是:为什么我会收到此错误,我该如何解决?

Gruntfile:

module.exports = function(grunt) {

    grunt.initConfig({
        nodeunit: {
            all: ['./**/*.test.js']
        }
    });

    grunt.loadNpmTasks('grunt-contrib-nodeunit');
};
Run Code Online (Sandbox Code Playgroud)

更新:安装tap到我的项目,但它也没有帮助.

node.js npm requirejs nodeunit gruntjs

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

摆脱与supertab传播的vim中的拼写错误

偶尔我会错误地输入一些标识符,但是不要注意,然后使用SuperTab扩展重复完全相同的错误.在Sublime中,我会使用多光标快速编辑此错字的所有实例.打字:%s/Identfier/Identifier/g需要更长时间; 我怎样才能更快更有效地做同样的事情?

vim

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

标准库中是否有(a-&gt; b)-&gt;((也许a)-&gt;(也许b))转换器?

我只是在学习Haskell,发现自己为作业分配了以下代码:

eval :: ExprT -> Integer
eval (Lit x)    = x
eval (Add x y)  = (eval x) + (eval y)
eval (Mul x y)  = (eval x) * (eval y)

evalMayBe :: Maybe ExprT -> Maybe Integer
evalMayBe Nothing   = Nothing
evalMayBe (Just x)  = Just (eval x)
Run Code Online (Sandbox Code Playgroud)

第二个函数似乎有点多余,所以我写了一个转换器:

toMayBe :: (a -> b) -> Maybe a -> Maybe b
toMayBe _ Nothing   = Nothing
toMayBe f (Just x)  = Just (f x)
Run Code Online (Sandbox Code Playgroud)

并将功能重写为

evalMayBe :: Maybe ExprT -> …
Run Code Online (Sandbox Code Playgroud)

haskell maybe

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