参数在定义中不匹配

时间:2016-03-09 09:11:52

标签: ios objective-c

这是一个声明为

的方法
cnt

,它被称为

 public static class PlaceholderFragment extends Fragment {
        /**
         * The fragment argument representing the section number for this
         * fragment.
         */
        private static final String ARG_SECTION_NUMBER = "section_number";
        private static int cnt = 0;
        public PlaceholderFragment() {
        }

        /**
         * Returns a new instance of this fragment for the given section
         * number.
         */
        public static PlaceholderFragment newInstance(int sectionNumber) {
            PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = null;
            if(cnt== 0) {
                rootView = inflater.inflate(R.layout.tab_fragment1, container, false);
                TextView textView = (TextView) rootView.findViewById(R.id.frag1);
                cnt++;
            }else if(cnt== 1){
                rootView = inflater.inflate(R.layout.tab_fragment2, container, false);
                TextView textView = (TextView) rootView.findViewById(R.id.frag2);
            }
            //textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER)));
            return rootView;
        }
    }

,定义是

- (void) startmonitoring:(NSDictionary *)dict;

我的问题是函数调用和函数定义中的参数完全不同。但令人惊讶的是,它在obj-c中工作..我在swift中尝试相同的事情并且发生错误(在参数不匹配的情况下应该发生)。所以有谁能说它在obj-c中是如何工作的?

2 个答案:

答案 0 :(得分:0)

你传递的dict是什么?它是一个带有"坐标的NSDictionary"属性?

答案 1 :(得分:0)

是的,它有效!但为什么? 在找到任何关于消息传递如何起作用的结论之前。这在Apple文档here

中有解释

在其中一点上写了传递给选择器的任何参数都被传递,这解释了为什么你的代码在obj-c中工作。不确定swift是否相同。

  

消息中传递的任何参数也会传递给objc_msgSend:

     

objc_msgSend(接收者,选择器,arg1,arg2,...)   消息传递功能可以完成动态绑定所需的一切:

     

它首先找到选择器引用的过程(方法实现)。由于可以通过单独的类以不同方式实现相同的方法,因此它找到的精确过程取决于接收器的类。   然后它调用该过程,将接收对象(指向其数据的指针)以及为该方法指定的任何参数传递给它。   最后,它将过程的返回值作为自己的返回值传递。

我希望它有用,我不会误导任何人。