这是一个声明为
的方法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中是如何工作的?
答案 0 :(得分:0)
你传递的dict
是什么?它是一个带有"坐标的NSDictionary"属性?
答案 1 :(得分:0)
是的,它有效!但为什么? 在找到任何关于消息传递如何起作用的结论之前。这在Apple文档here
中有解释在其中一点上写了传递给选择器的任何参数都被传递,这解释了为什么你的代码在obj-c中工作。不确定swift是否相同。
消息中传递的任何参数也会传递给objc_msgSend:
objc_msgSend(接收者,选择器,arg1,arg2,...) 消息传递功能可以完成动态绑定所需的一切:
它首先找到选择器引用的过程(方法实现)。由于可以通过单独的类以不同方式实现相同的方法,因此它找到的精确过程取决于接收器的类。 然后它调用该过程,将接收对象(指向其数据的指针)以及为该方法指定的任何参数传递给它。 最后,它将过程的返回值作为自己的返回值传递。
我希望它有用,我不会误导任何人。